Python WordCloud词云图

python 的 wordcloud 库用于生成各种漂亮的词云图,它依赖 numpy 库和 PIL 库。

wordcloud 库的官方参考为:

https://amueller.github.io/word_cloud/generated/wordcloud.WordCloud.html
1.WordCloud参数详解
wordcloud.WordCloud() 用于生成或者绘制词云的对象

from wordcloud import WordCloud
 
WordCloud(font_path=None,     #  字体路径(默认为 wordcloud 库下的 DroidSansMono.ttf 字体)。
                    width=400,    #  画布宽度(默认为400像素)。
                    height=200,     #  画布高度(默认为200)。
                    margin=2,    #  每个单词间的间隔 (默认为2)
                    ranks_only=None,    
                    prefer_horizontal=0.9,    #  词语水平方向排版出现的频率(默认为0.9。因为水平排版和垂直排版概率之和为 1,所以默认垂直方向排版为0.1。)
                    mask=None,    #  nd-array or None (default=None), 可简单理解为绘制模板。当 mask 不为 0 时,“画布”形状大小由 mask 决定,height 和 width 设置无效。
                    scale=1,    #  float (default=1)。计算和绘图之间的比例(就是放大画布的尺寸,也可以叫比例尺)。对于大型词云图,使用比例尺比设置画布尺寸会更快,但是单词匹配不是很好。
                    color_func=None,    
                    max_words=200,    #  number (default=200) 最大显示单词字数。
                    max_font_size=None,    #  int or None (default=None) 最大单词的字体大小,如果没有设置的话,直接使用画布的大小。
                    min_font_size=4,    
                    stopwords=None,    #  set of strings or None (停用词,被淘汰不用于显示的词语,默认使用内置的 stopwords)。
                    random_state=None,    
                    background_color='black',    #  color value (default=”black”) (词云图像的背景色,默认为黑色。)
                    font_step=1, mode='RGB',    
                    relative_scaling='auto',    #  float (default=’auto’) 词频大小对字体大小的影响度。如果设置为1的话,如果一个单词出现两次那么其字体大小为原来 的两倍。
                    regexp=None,    # string or None (optional) 使用正则表达式分割输入的字符。没有指定的话就使用r"\w[\w']+"。
                    collocations=True,    # bool, default=True 是否包括两个词的搭配(双宾语)
                    colormap=None,     # string or matplotlib colormap, default=”viridis”。颜色映射方法,每个单词对应什么颜色,就是根据这个colormap的。如果设置 color_func ,则设置的这个作废。
                    normalize_plurals=True,    
                    contour_width=0,     
                    contour_color='black',    
                    repeat=False,    #  bool, default=False  是否需要重复单词以使得总单词数量达到max_words。           )

2.生成词云图

import jieba
import PIL
import matplotlib.pyplot as plt
import numpy as np 

#读取文本
with open("test.txt","r",encoding="utf-8") as f:
    txt=f.read()  
words=jieba.lcut(txt)    #利用jieba分词
ls=[]
for word in words:
    if len(word)>1:
        ls.append(word)    #筛选出两个字以上的词组
txt=" ".join(ls)  
alice_mask = np.array(PIL.Image.open('test.jpg'))  #根据图片形状生成相应形状的词云图
wd=WordCloud(mask=alice_mask,mode="RGBA",max_font_size=120,margin=1,background_color="white",max_words=50,scale=10,font_path ='simhei.ttf')
wd.generate(txt)   #生成词云图
plt.imshow(wd)     #展示生成的词云图
plt.axis("off")    #取消坐标轴
plt.savefig("demo.jpg",dpi=600)    #保存图片到本地 
plt.show()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 安装jieba和wordcloud库 ```python !pip install jieba !pip install wordcloud ``` 2. 导入所需库 ```python import jieba import wordcloud from PIL import Image import numpy as np import matplotlib.pyplot as plt ``` 3. 读取文本并使用jieba进行分词 ```python with open('text.txt', 'r', encoding='utf-8') as f: text = f.read() words = jieba.lcut(text) # 使用jieba进行分词 ``` 4. 根据词频生成词云图 ```python # 统计词频 word_counts = {} for word in words: if len(word) == 1: continue if word not in word_counts: word_counts[word] = 1 else: word_counts[word] += 1 # 生成词云图 wc = wordcloud.WordCloud( font_path='msyh.ttc', # 字体文件路径 background_color='white', # 背景颜色 width=800, # 宽度 height=600, # 高度 max_words=200, # 最大显示的单词数 max_font_size=100, # 最大字体大小 scale=8, # 缩放比例 random_state=42 # 随机状态 ).generate_from_frequencies(word_counts) # 显示词云图 plt.imshow(wc) plt.axis('off') plt.show() ``` 5. 可以根据需要自定义词云图的形状 ```python # 读取图片 mask = np.array(Image.open('mask.png')) # 生成词云图 wc = wordcloud.WordCloud( font_path='msyh.ttc', background_color='white', width=800, height=600, max_words=200, max_font_size=100, mask=mask, # 以图片形状为背景 contour_width=2, # 设置轮廓线宽度 contour_color='steelblue', # 设置轮廓线颜色 random_state=42 ).generate_from_frequencies(word_counts) # 显示词云图 plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show() ``` 其中,mask.png是自定义的图片,可以是任意形状的图片。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值