python设置word背景色_Python数据可视化:WordCloud入门

WordCloud是一种很好的展现数据的方式,网上也有不少小工具和在线网页。

但是有些不支持中文,有些安装复杂,所以决定用Python实现。

主要参考官网,通过官网的例子,讲一下WordCloud的制作。

主要流程

获取内容的路径

如果是一段文字,系统自动算频次

你也可以直接导入统计好的频次

设置字体

一般字体路径在C:\Windows\Fonts,你可以选自己喜欢的中文或者英文字体

切割中文字符

英文字符就不用切割了

输入WordCloud的参数

背景色

字号

生成的形状

颜色

字体大小

字体旋转等等

生成WordCloud

用matplotlib显示图片

效果图

安装库

老规矩,首先,你要安装库。

最基本的两个:

pip install wordcloud #这是WordCloud的库

pip install matplotlib #显示图像

一个单词构造WordCloud

在这个代码中,我们需要安装一个numpy库

(大部分小伙伴应该都装过,就不用再装了)

pip install numpy

这里用这个库,主要是想用数学坐标生成一个简单的背景图案,比如圆形、方形

基本步骤

1、输入单词

2、用numpy 生成一个形状,下面生成了一个圆形mask

3、输入WordCloud的参数(包括背景色、是否重复、图案形状)

4、用matplotlib显示图片

import numpy as np

import matplotlib.pyplot as plt

from wordcloud import WordCloud

text = "square" #输入你要的单词

x, y = np.ogrid[:300, :300] #快速产生一对数组

# 产生一个以(150,150)为圆心,半径为130的圆形mask

mask = (x - 150) ** 2 + (y - 150) ** 2 > 130 ** 2 #此时mask是bool型

mask = 255 * mask.astype(int) #变量类型转换为int型

wc = WordCloud(

background_color="white", #背景颜色为“白色”

repeat=True, #单词可以重复

mask=mask #指定形状,就是刚刚生成的圆形

)

wc.generate(text) #从文本生成wordcloud

plt.axis("off") #把作图的坐标轴关掉

plt.imshow(wc, interpolation="bilinear")

plt.show()

生成WordCloud

最简单的生成方式,文本内容都是英文,直接用系统默认的形状(一个长方形)

我这边是导入了一个商务英语的txt,所以可以看到,出现次数最多的单词是company,然后是business、new、work等单词,我还看到了money,哈哈~

基本步骤

1、获取内容txt的路径

2、输入WordCloud的参数(包括背景色、字号等)

3、生成WordCloud

4、用matplotlib显示图片

*WordCloud有很多参数,如果你不写,都是默认的。比如背景色默认黑色。

import os

from os import path

from wordcloud import WordCloud

from matplotlib import pyplot as plt

# 获取当前文件路径

d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()

# 获取文本txt的路径(txt和代码在一个路径下面)

text = open(path.join(d,'BusinessEnglish.txt')).read()

# 生成词云

wc = WordCloud(

scale=2,

max_font_size=100, #最大字号

background_color='white' #设置背景颜色

)

wc.generate(text) # 从文本生成wordcloud

# wc.generate_from_text(text) #用这种表达方式也可以

# 显示图像

plt.imshow(wc,interpolation='bilinear')

plt.axis('off')

plt.tight_layout()

wc.to_file('标签云效果图.png') # 储存图像

#plt.savefig('标签云效果图.png',dpi=200) #用这个可以指定像素

plt.show()

设置WordCloud形状

都是长方形、圆形、正方形这种,好像不够炫酷

为了炫酷,我们可以给它设置不同的形状,比如云朵、爱心等等

下面我们用Alice的小裙子做个实例

这个图片长这样

我们生成的图片是这样的,可以看到,完整保留了上图的轮廓

基本步骤

和之前基本都是一致的,就是多了一步,导入指定图片,获取图片轮廓

1、获取内容txt的路径

2、输入WordCloud的参数(包括背景色、字号等),指定了生成的形状

3、生成WordCloud

4、用matplotlib显示图片

*代码中增加了一个stopwords,有些你觉得没意义的单词,不想显示在图片上,你就可以放在这里

from os import path

from PIL import Image

import numpy as np

import matplotlib.pyplot as plt

import os

from wordcloud import WordCloud, STOPWORDS

# 获取当前文件路径

d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()

# 获取文本txt的路径(txt和代码在一个路径下面)

text = open(path.join(d, 'BusinessEnglish.txt')).read()

# 读取mask的图像(图像和代码在一个路径下面)

alice_mask = np.array(Image.open(path.join(d, "alice_mask.png")))

# 设置不显示单词,比如said、in、on、is这种单词

stopwords = set(STOPWORDS)

stopwords.add("said")

# 设置词云参数

wc = WordCloud(background_color="white",

max_words=2000,

mask=alice_mask,

stopwords=stopwords,

contour_width=3, #设置轮廓宽度

contour_color='steelblue') #设置轮廓颜色

# 从文本生成wordcloud

wc.generate(text)

# 保存到文件

wc.to_file(path.join(d, "alice.png"))

# 显示图片

plt.imshow(wc, interpolation='bilinear')

plt.axis("off")

plt.figure() #新建一个图片,把mask也显示出来

plt.imshow(alice_mask, cmap=plt.cm.gray, interpolation='bilinear')

plt.axis("off")

plt.show()

根据图片调整颜色

原图是这样的

如果我们直接根据上一步,获取图片轮廓,可以得到下图

我们进一步,根据原图,调整颜色

其实就是获取了图片颜色,也是一行代码

image_colors = ImageColorGenerator(alice_coloring)

完整代码

from os import path

from PIL import Image

import numpy as np

import matplotlib.pyplot as plt

import os

from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator

# 获取当前文件路径

d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()

# 获取文本txt的路径(txt和代码在一个路径下面)

text = open(path.join(d, 'BusinessEnglish.txt')).read()

# 读取我要的图片文件

alice_coloring = np.array(Image.open(path.join(d, "alice_color.png")))

# 设置不显示的单词

stopwords = set(STOPWORDS)

stopwords.add("said")

# 设置词云参数

wc = WordCloud(background_color="white",

max_words=2000,

mask=alice_coloring,

stopwords=stopwords,

max_font_size=40,

random_state=42)

# 从文本生成wordcloud

wc.generate(text)

# 根据图片,创建颜色

image_colors = ImageColorGenerator(alice_coloring)

# 把图片分成3份

fig, axes = plt.subplots(1, 3)

axes[0].imshow(wc, interpolation="bilinear")

# recolor wordcloud and show

# we could also give color_func=image_colors directly in the constructor

axes[1].imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")

axes[2].imshow(alice_coloring, cmap=plt.cm.gray, interpolation="bilinear")

for ax in axes:

ax.set_axis_off()

# 单独显示图片

# plt.figure()

# plt.imshow(wc, interpolation="bilinear")

# plt.axis("off")

# plt.figure()

# plt.imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")

# plt.axis("off")

# plt.figure()

# plt.imshow(alice_coloring, cmap=plt.cm.gray, interpolation="bilinear")

# plt.axis("off")

plt.show()

用频率绘制WordCloud

上面是直接把一个txt输进去,系统自动给你算出现次数的

但是实际过程中,我们有时候,是知道单词出现次数的,我们就想根据已知的次数显示

这一步,其实就改了一行代码,

原来是这样的

wc.generate(text)

# 这里的text是一段文字

现在是这样的

wc.generate_from_frequencies(text)

# 这里的text是一个字典

# 'ken': 1, 'was': 47, 'hot': 2, 'water': 2

如果你已经有一个字典,直接代进去就好了

这里给大家详细看一下,如果假设我没有这个字典

我还是一段文字,我想先生成这个字典,再代入进去

这里,你需要安装一个库multidict,创建一键多值字典

pip install multidict

用multidict这个库,我可以把文本变成一个字典

通过上图就可以看到,这个字典有1105个组合,每一个单词,都统计了出现次数

import multidict as multidict

import numpy as np

import os

import re

from PIL import Image

from os import path

from wordcloud import WordCloud

import matplotlib.pyplot as plt

def getFrequencyDictForText(sentence):

fullTermsDict = multidict.MultiDict()

tmpDict = {}

# making dict for counting frequencies

for text in sentence.split(" "):

if re.match("a|the|an|the|to|in|for|of|or|by|with|is|on|that|be", text):

continue

val = tmpDict.get(text, 0)

tmpDict[text.lower()] = val + 1

for key in tmpDict:

fullTermsDict.add(key, tmpDict[key])

return fullTermsDict

def makeImage(text):

alice_mask = np.array(Image.open("alice_mask.png"))

wc = WordCloud(

background_color="white",

max_words=1000,

mask=alice_mask

)

# generate word cloud

wc.generate_from_frequencies(text)

# show

plt.imshow(wc, interpolation="bilinear")

plt.axis("off")

wc.to_file('frequency.png') # 储存图像

plt.show()

# 获取当前文件路径

d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()

# 获取文本txt的路径(txt和代码在一个路径下面)

text = open(path.join(d, 'BusinessEnglish.txt'), encoding='utf-8')

text = text.read()

makeImage(getFrequencyDictForText(text))

生成中英文WordCloud

生成一个中英文混搭的WordCloud

如果你的txt全是中文,那就是全中文的

基本步骤

和之前基本也都一样,就是中文字符,需要增加一个中文词语切割

这就需要添加一个库

pip install jieba # 中文切割

1、获取内容txt的路径

2、设置字体

3、切割中文字符

4、输入WordCloud的参数(包括背景色、字号等),指定了生成的形状

5、生成WordCloud

6、用matplotlib显示图片

import os

from os import path

from wordcloud import WordCloud

from matplotlib import pyplot as plt

import jieba

# 获取当前文件路径

d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()

# 获取文本txt

text = open(path.join(d,'商务英语.txt'),encoding='utf-8').read()

# 设置中文字体

font_path = 'C:\Windows\Fonts\simfang.ttf' # 字体路径

# 精确切割中文字符

text = ' '.join(jieba.cut(text, cut_all = False))

# 生成词云

wc = WordCloud(

font_path = font_path, #字体路径

scale=2,

max_words = 100, #最多词个数

max_font_size=100, #最大字号

background_color='white' #背景色

)

wc.generate(text)

# 显示图像

plt.imshow(wc,interpolation='bilinear')

plt.axis('off')

plt.tight_layout()

# 储存图像

#wc.to_file('标签云效果图.png')

#plt.savefig('标签云效果图.png',dpi=200)

plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 解析日期格式_日期/时间格式/解析,Java 8样式

java 解析日期格式自Java 几乎 开始以来,Java开发人员就通过java.util.Date类(自JDK 1.0起)和java.util.Calendar类(自JDK 1.1起 )来处理日期和时间。 在这段时间内,成千上万(甚至数百万&#x…

php第三方登录代码,thinkPHP5项目中实现QQ第三方登录功能

本文实例讲述了thinkPHP5项目中实现QQ第三方登录功能。分享给大家供大家参考,具体如下:最近用thinkPHP 5框架做了一个婚纱店的项目,在开发过程中需要用到第三方登录,腾讯官方给的案例是几个文件相互包含实现的,放到tp5…

mac 显示隐藏文件_如何在Mac上显示隐藏文件?苹果mac显示隐藏文件夹方法

与任何操作系统一样,macOS会将重要文件隐藏起来,以防止意外删除它们并因此而损坏系统。但是,在某些情况下,您可能需要在Mac上显示隐藏文件,例如,浏览“ 库”文件夹并清除旧日志,缓存或其他垃圾文…

分布式虚拟跟踪

跟踪提供了对系统的可见性,使开发人员和操作人员可以在运行时观察应用程序。 当系统不断增长并与更多微服务进行交互时,跟踪变得非常有价值。 在这样的环境中,这些痕迹非常棒,可以定位导致性能下降的故障和瓶颈。 在这篇文章中&a…

php 删除数组的空元素,php删除数组空元素的方法_后端开发

php如何实现自动跳转_后端开发php实现自动跳转的方法:1、通过php内置函数“header”,将http响应头中的“Location”设置为要跳转的URL即可;2、可以在javascript代码中将“window.location.href”指向要跳转的URL即可。php删除数组空元素的方法…

map for循环_JavaScript 用 for 循环太 low?你是不是有什么误解

天要吐槽下,我时不时地看到有些文章说“循环语句不好,你应该用 filter,map 和 reduce ”——每次看到有文章鼓吹,所有需要循环的场景一律用这几个函数式方法,我都恨得牙痒痒。没错,这些函数式方法确实有它们…

vue 动态组件组件复用_真正的动态声明性组件

vue 动态组件组件复用在这篇简短的文章中,我将重点介绍ADF动态声明性组件。 我的意思是一个众所周知的ADF标签af:declarativeComponent 。 它可以用作将页面设计为页面片段和组件组成的一种非常便捷的方法。 例如,我们的页面可以包含以下代码…

简单工程验收单表格_中铁超大型工程项目-123个精细化管理手册配套表格附件,超全...

中铁超大型工程项目-123个精细化管理手册配套表格附件,超全!什么是项目精细化?答:工程项目精细化管理是一个系统的管理体系,包含一系列管理制度和办法,除了《工程项目精细化管理办法》这个纲领性文件外&…

php 执行 javascript,Bash/PHP/Javascript:如何运行输出javascript的php文件,并执行该javascript?...

目前我试图发送一个webhook请求来争执,所以我可以发送更新到我的资源库到我的不一致服务器中的一个频道。如果我在浏览器中加载页面,它会运行此代码,并且该消息将出现在我的不一致中:$(document).ready(function(){setTimeout(sen…

递归分解WAR文件

抽象 是否曾经需要分解WAR文件以及分解WAR文件中的所有JAR文件? 是的,我也是! 我写了Ferris-war-exploder来爆炸: 一个JAR文件 一个WAR文件,它找到的每个JAR文件也会爆炸。 包含每个JAR文件(请参阅&…

判断unsigned long long乘法溢出_信息安全课程17:缓冲区溢出2

在之前所讲述的内容中,都是我们在自己的程序中自行修改的;正常情况下,没有程序员会在自己的代码中这样写——那有没有办法攻击别人正常的程序呢?攻击者怎么样能够影响到不是自己的程序的返回地址呢?以及怎么样通过攻击…

java 保垒机telnet,开源堡垒机系统Teleport

一. teleport简介Teleport是一款简单易用的堡垒机系统,具有小巧、易用的特点,支持 RDP/SSH/SFTP/Telnet 协议的远程连接和审计管理。Teleport由两大部分构成:跳板核心服务WEB操作界面官网地址: https://tp4a.com/ 官网文档: https://docs.…

choiceformat_ChoiceFormat:数字范围格式

choiceformatChoiceFormat类的Javadoc指出ChoiceFormat “允许您将格式附加到一系列数字上”,并且“通常在MessageFormat中用于处理复数”。 这篇文章描述了java.text.ChoiceFormat并提供了一些在Java代码中应用它的示例。 ChoiceFormat与java.text包中其他“ 格式…

python和rpa_什么是RPA

产品介绍阿里云RPA产品是一款新型工作流程自动化办公机器人软件,通过模拟人工操作进行自动流程执行处理。它可以将办公人员从每日的重复工作中解放出来,提高生产效率。具体而言,阿里云RPA是基于软件机器人和人工智能(AI,Artificia…

php背景图片随页面大小改变,css背景图根据屏幕大小自动缩放

css背景图根据屏幕大小自动缩放代码:html,body{margin:0px;padding:0px;}#background { position: fixed;top: 0;left: 0;width: 100%;height: 100%;overflow: hidden;background-color: #211f1f; display:none\8;}#background .bg-photo {position: absolute;top: …

Java –缺少字体–崩溃的应用程序!

Eclipse MAT和Heaphero都是分析大型堆转储的流行Java工具。 最近,当我们尝试在Eclipse MAT中分析堆转储文件时遇到了一个有趣的问题。 工具因缺少字体crash而崩溃。 我们认为我们将与您分享发现的结果。 CompositeStrike.getStrikeForSlot()…

forever不重启 node_运维监控Prometheus,部署安全的node_exporter监控主机

简介prometheus监控系统的时候,是使用pull的方式来获取监控数据,需要被监控端监听对应的端口,prometheus从这些端口服务中拉取对应的数据。node_exporter安全性讨论node_exporter是收集操作系统的指标的一个程序。例如CPU,内存&am…

netbeans ide_IDE:5个最喜欢的NetBeans功能

netbeans ide愉快的发展……。 NetBeans具有许多有趣的功能 ,这些功能使开发非常容易,只需很少的步骤,并且可以在非常快速地将产品推向市场的过程中创造出非常高效的环境 。 将我的谈话仅限于五个功能非常困难,而此IDE具有大量有…

python做excel麻烦_高效办公必备:别人通宵做的 Excel,我用Python 半小时搞定!

原标题:高效办公必备:别人通宵做的 Excel,我用Python 半小时搞定!最近经常听到周围的人抱怨:“工作忙,在加班……”不知不觉,当代职场人早就被“996”支配得体无完肤了,不仅身体吃尽熬夜加班的苦…

matlab resample,resample matlab实现

使用线性插值实现sample rate转换。function output simpleResample(input, inputfs, outputfs)inputLen length(input(:, 1));outputLen floor(inputLen * outputfs / inputfs);output zeros(outputLen, 1);timeStep inputfs / outputfs;curTime 1;integer 0;frac 0;f…