赞
踩
目录
目标:用python画出,网上流行的wordcloud词云图
2.3.2 读取txt文件的内容,存储在变量wordlist里
2.3.3 用mask属性进行图片解码,然后利用解码的图形形式
4.1.1 用 plt.imshow(wordcloud)显示词云
4.1.2 用wordcloud.to_image().show() 来显示词云,并不保存图片!
4.2.2 使用 wordcloud.to_file(path) 保存词云
4.2.3 使用wordcloud.to_image().save(path)
以我的环境 anaconda为例子
随便找点词语,有重复的,不重复的即可。
开心、喜悦、狂喜、尽情、快乐、愉悦、畅快、欣喜、幸福、得意、痛快、满足、欢乐、快活
快乐,舒畅,舒心,欢畅,夷悦,欣忭,怡悦,得意,愿意,欢跃,夷愉,欢快,喜悦,快活,愉快,欢乐,忻悦,欣喜,欢喜,痛快,雀跃,乐意
眉开眼笑 眉飞色舞 喜上眉梢 喜在眉宇 喜眉笑目 捧腹大笑 手舞足蹈 前仰后合
开怀大笑 欢蹦乱跳 笑容可掬 喜笑顡开 笑逐颜开 相视而笑 谈笑风生 兴高采烈
喜从天降 高高兴兴 开开心心 嘻嘻哈哈 满怀喜悦 满心欢喜 喜出望外 大喜过望
甜美、微笑、兴奋,陶醉,高兴,自豪、欣慰,满意、幸运、嬉笑,满意、幸运、嬉笑,狂笑,荣幸,痛快、满足、欢乐、快活,畅快、欣喜、幸福、得意,开心、喜悦、狂喜、尽情、快乐、愉悦、畅快、欣喜、幸福、逸乐、尽情、舒畅、愉快、喜哈、愉快
- from wordcloud import WordCloud,STOPWORDS
- import PIL.Image as image#默认矩形,有想要的形状可以加入图片
-
- #plt.rcParams['font.family']='LiSu'# 正常显示中文
- #plt.rcParams['axes.unicode_minus']=False# 正常显示负号
-
- def get_wordList():
- f = open(r'C:\Users\Administrator\Desktop\t2.txt')
- wordList = f.read()
- return wordList
- def get_wordClound(mylist):
- pic_path = r'C:\Users\Administrator\Desktop\tp2.jpg'#注意路径
- img_mask = np.array(image.open(pic_path))#图片解码
- wordcloud = WordCloud(background_color = "white",mask = img_mask).generate(mylist)
- #font_path ="C:/Windows/Fonts/msyh.ttc",
- #mask = img_mask掩码 generate(mylist)获取数据
- plt.imshow(wordcloud)
- plt.axis("off")#去除坐标轴
- wordList = get_wordList()
- get_wordClound(wordList)
-
- plt.title("wordcloud词云实验")
- plt.show()
matplotlib 对中文的支持有问题
一般画图时,遇到图片相关中文显示问题,一般在代码前面加这2句
plt.rcParams['font.family']='LiSu'# 正常显示中文
plt.rcParams['axes.unicode_minus']=False# 正常显示负号
- from wordcloud import WordCloud,STOPWORDS
- import PIL.Image as image#默认矩形,有想要的形状可以加入图片
-
- plt.rcParams['font.family']='LiSu'# 正常显示中文
- plt.rcParams['axes.unicode_minus']=False# 正常显示负号
-
- def get_wordList():
- f = open(r'C:\Users\Administrator\Desktop\t2.txt')
- wordList = f.read()
- return wordList
- def get_wordClound(mylist):
- pic_path = r'C:\Users\Administrator\Desktop\tp2.jpg'#注意路径
- img_mask = np.array(image.open(pic_path))#图片解码
- wordcloud = WordCloud(font_path ="C:/Windows/Fonts/msyh.ttc",background_color = "white",mask = img_mask).generate(mylist)
- #mask = img_mask掩码 generate(mylist)获取数据
- plt.imshow(wordcloud)
- plt.axis("off")#去除坐标轴
- wordList = get_wordList()
- get_wordClound(wordList)
-
- plt.title("wordcloud词云实验")
- plt.show()
居然不需要 import matplotlib,怀疑又是jupyternotebook这个IDE的特殊性导致的?
jupyternotebook我现在知道的例外的特点:
- 不用写 plt.show() 也能显示matplotlib.pyplot 下的figure内的图形
- 不支持弱引用
- (猜测的) import matplotlib 也可以用plt的内容作图?
def get_wordList():
f = open(r'C:\Users\Administrator\Desktop\t2.txt')
wordList = f.read()
return wordList
def get_wordClound(mylist):
pic_path = r'C:\Users\Administrator\Desktop\tp2.jpg'
img_mask = np.array(image.open(pic_path))
wordcloud = WordCloud(font_path ="C:/Windows/Fonts/msyh.ttc",background_color = "white",mask = img_mask).generate(mylist)
#mask = img_mask掩码 generate(mylist)获取数据
plt.imshow(wordcloud)
plt.axis("off")#去除坐标轴
plt.imshow(wordcloud)
plt.axis("off")#去除坐标轴
后面详细说明
wordcloud = WordCloud(font_path ="C:/Windows/Fonts/msyh.ttc",background_color ="white",mask = img_mask).generate(mylist)
help(wordcloud.WordCloud()) 内容太多太长了,这里就不贴了
- import wordcloud
-
- help(wordcloud.WordCloud())
- import matplotlib.pyplot as plt
- import wordcloud
-
- text="你好,hello,hello,hello,hi"
- wordcloud=wordcloud.WordCloud(font_path ="C:/Windows/Fonts/msyh.ttc",\
- width=int(100/0.618),\
- height=100,\
- mode='RGBA',\
- background_color=None,\
- min_font_size=1,\
- max_font_size=20,\
- repeat=True,
- max_words=20,
- colormap="spring",
- ).generate(text)
-
- plt.imshow(wordcloud)
- plt.axis("off")
- plt.show()
- import matplotlib.pyplot as plt
- import wordcloud
-
- text="你好,hello,hi"
- wordcloud=wordcloud.WordCloud().generate(text)
-
- plt.imshow(wordcloud, interpolation="bilinear")
- plt.axis("off")
- plt.show()
# 显示
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")plt.show()
- import matplotlib.pyplot as plt
- import wordcloud
-
- text="你好,hello,hi"
- wordcloud=wordcloud.WordCloud().generate(text)
-
- #这个不行 #plt.show(wordcloud)
- wordcloud.to_image().show()
- #plt.axis("off")
- import matplotlib.pyplot as plt
- import wordcloud
-
- text="你好,hello,hi"
- wordcloud=wordcloud.WordCloud().generate(text)
-
- #这个不行 #plt.show(wordcloud)
- wordcloud.to_image()
- #plt.axis("off")
依赖的包
from wordcloud import WordCloud
from wordcloud import ImageColorGenerator
import matplotlib.pyplot as plt
import jieba
import jieba.analyse
from PIL import Image
import random
import numpy as np
- import matplotlib.pyplot as plt
- import wordcloud
-
- text="你好,hello,hi"
- wordcloud=wordcloud.WordCloud().generate(text)
-
- #这个不行 #plt.show(wordcloud)
- wordcloud.to_file(r"C:\Users\Administrator\Desktop\1.png")
- #plt.axis("off")
- import matplotlib.pyplot as plt
- import wordcloud
-
- text="你好,hello,hi"
- wordcloud=wordcloud.WordCloud().generate(text)
-
- #这个不行 #plt.show(wordcloud)
- wordcloud.to_image().save(r"C:\Users\Administrator\Desktop\2.png")
- #plt.axis("off")
mask 获得蒙版效果
蒙版==字体的显示区域
设置蒙版的边框
counter_width参数:我们注意到之前生成的图虽然有了边框,但只有一个大致的形状,想要把边框用直线画出来,就需要设置这个参数我们设置contour_width=3
,得到的结果为:
11.mode参数:mode参数默认为RGB通道,如果我们想设置词云背景为透明,需要将mode设置为RGBA,background_color设置为None,生成结果为背景透明图片:
使用图片的配色??
from wordcloud import ImageColorGenerator from PIL import Image import numpy as np colors=np.array(Image.open("780.jpg")) color_map=ImageColorGenerator(colors)
我们通过将图片转化为array数组来获取它的RGB三通道值,再用wordcloud自带的ImageColorGenerator函数将其转为配色,注意这时候就不能再用colormap参数了,这时候得使用color_func参数:
from wordcloud import WordCloud
from wordcloud import ImageColorGenerator
from PIL import Image
import numpy as npcolors=np.array(Image.open("780.jpg"))
color_map=ImageColorGenerator(colors)
wd=WordCloud(font_path="C:\\Windows\\Fonts\\simsun.ttc",background_color="white",repeat=True,color_func=color_map)
wd.generate("1 2 33 333 31")
wd.to_file("1.png")
# 颜色函数
def random_color(word, font_size, position, orientation, font_path, random_state):
s = 'hsl(0, %d%%, %d%%)' % (random.randint(60, 80), random.randint(60, 80))
return s
...
wc = WordCloud(color_func=random_color, font_path='Hiragino.ttf',mode='RGBA', background_color=None, mask=mask)
下面2段只要1个,要改
- from wordcloud import WordCloud
-
- # 创建一个WordCloud对象
- wordcloud = WordCloud()
-
- # 定义文本
- text = "This is a sample text for word cloud generation."
-
- # 使用WordCloud.generate()函数生成词云图
- wordcloud.generate(text)
-
- # 显示词云图
- wordcloud.to_image().show()
- from wordcloud import WordCloud
- import matplotlib.pyplot as plt
-
- # 创建一个WordCloud对象
- wordcloud = WordCloud()
-
- # 生成词云图
- text = "Python wordcloud词云,在一段文本中提取关键词进行扁平化的展示,更能吸引目标客户的眼球。"
- wordcloud.generate(text)
-
- # 显示词云图
- plt.imshow(wordcloud, interpolation='bilinear')
- plt.axis('off')
- plt.show()
6.1 中午分词模块,jieba,解霸?结巴?
6.2 获得文本内容
text = open("D:/++/宏观经济和资产配置.txt", encoding="utf-8").read() # 标明文本路径,打开
text = ' '.join(jieba.cut(text))
使用权重
# 提取关键词和权重
freq = jieba.analyse.extract_tags(text_new, topK=200, withWeight=True) # 列表
freq = {i[0]: i[1] for i in freq} # 字典
mask = np.array(Image.open(f"{base_dir}color_mask.png"))
wc = WordCloud(font_path='Hiragino.ttf',mode='RGBA', background_color=None, mask=mask)
res = wc.generate_from_frequencies(freq)
freq = nltk.FreqDist(word_text)
# wc.fit_words(freq) # 然后再generate
wc.generate_from_frequencies(freq)
# 分词
text_new = " ".join(jieba.cut(text))
wc = WordCloud('Hiragino.ttf') # 不加字体会中文乱码
text = ' '.join(jieba.cut(text))
- import jieba
- import matplotlib.pyplot as plt
- from wordcloud import WordCloud
-
- text = open("D:/++/宏观经济和资产配置.txt", encoding="utf-8").read() # 标明文本路径,打开
-
- # 生成对象
- wc = WordCloud(font_path = "C:\Windows\Fonts\Microsoft YaHei UI\msyh.ttc",width=500, height=400, mode="RGBA", background_color=None).generate(text)
- # 显示词云图
- plt.imshow(wc, interpolation="bilinear")
- plt.axis("off")
- plt.show()
-
- #保存文件
- wc.to_file("C:/Users/xiao/Desktop/ciyun1.png")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。