找回密码
 会员注册
查看: 28|回复: 0

python绘制词云图(自定义png形状、指定字体、颜色)最全!!!

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
71371
发表于 2024-9-9 17:21:36 | 显示全部楼层 |阅读模式
前言本文为分总结构,有特定需求的可以查阅前部分分结构的对应板块,最后的总结不懂的可以在分板块查阅解释。分板块分别有引用的库、阅读文本、分词并设置停用词、设置png掩膜、字体设置、生成词云图,感谢您点开这篇分享,祝顺利。目录前言一、引用的库二、阅读文本(让python阅读)三、分词并设置停用词四、设置png掩膜五、字体设置六、生成词云图总结 生成示例一、引用的库fromwordcloudimportWordCloud,STOPWORDSimportmatplotlib.pyplotaspltimportnumpyasnpimportjieba.possegaspsegfromcollectionsimportCounterimportPIL.ImageasImagefrommatplotlibimportcolors确保已安装以上的库,不然运行会报错#安装库可以用清华的镜像网站(可能会更新,可以上官网查询地址)pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplesome-package二、阅读文本(让python阅读)#阅读文本(这里yourfile.txt,根据文本所在具体位置进行设置)text=open("yourfile.txt",encoding="utf-8").read()words=pseg.cut(text)这里"yourfile.txt",根据文本所在具体位置进行设置三、分词并设置停用词#按指定长度和词性提取词report_words=[]forword,flaginwords:if(len(word)>=2)and('n'inflag):#这里设置统计的字数report_words.append(word)#设置停用词stopwords=set(STOPWORDS)stopwords.update(["的","感谢","我代表","以上","报告","表示诚挚感谢","战略"])#去除停用词report_words=[wordforwordinreport_wordsifwordnotinstopwords]#统计高频词汇result=Counter(report_words).most_common(200)#词的个数#建立词汇字典content=dict(result)#输出词频统计结果foriinrange(50):word,flag=result[i]print("{0:5}".format(word,flag))len(word)设置的是词长,想要提取两个两个字的就设置2,三个三个字的就设置3(以此类推)result=Counter(report_words).most_common(200) 这里的200是指统计200个词用于绘制,可以根据需求设置四、设置png掩膜#设置png掩膜(yourfile.png根据实际路径进行替换)background=Image.open("yourfile.png")mask=np.array(background)yourfile.png根据实际路径进行替换如果输出结构还是长方形(正方形),应该是png图片“有问题”,可以尝试以下的处理1.用p图软件把图片改成纯黑色(可能别的也可以,我没试过)2.用以下代码把白色背景改为透明#如果当前位深是32的话,可以不用写转RGBA模式的这一句,但是写上也没啥问题#从RGB(24位)模式转成RGBA(32位)模式img=Image.open("yourfile.png").convert('RGBA')W,L=img.sizewhite_pixel=(0,0,0,0)#白色forhinrange(W):foriinrange(L):ifimg.getpixel((h,i))==white_pixel:img.putpixel((h,i),(255,255,255,0))#设置透明img.save("yourfile_new.png")#自己设置保存地址这里有两个参数需要修改yourfile.png根据实际路径进行替换,yourfile_new.png(这是修改后图片)根据实际路径进行替换五、字体设置#设置字体样式路径font_path=r"C:\Windows\Fonts\STLITI.TTF"#设置字体大小max_font_size=200min_font_size=10#建立颜色数组,可更改颜色color_list=['#FF274B']#调用颜色数组colormap=colors.ListedColormap(color_list)字体样式:一般都在这个路径,可以自己根据需求修改或者下载想要的字体字体大小:最大和最小根据需求更改字体颜色:可以不要这行代码(默认设置),也可以根据需求设置一种或多种颜色(我这里只设置了一种)六、生成词云图#生成词云wordcloud=WordCloud(scale=4,#输出清晰度font_path=font_path,#输出路径colormap=colormap,#字体颜色width=1600,#输出图片宽度height=900,#输出图片高度background_color='white',#图片背景颜色stopwords=stopwords,#停用词mask=mask,#掩膜max_font_size=max_font_size,#最大字体大小min_font_size=min_font_size)#最小字体大小wordcloud.generate_from_frequencies(content)#使用matplotlib显示词云plt.imshow(wordcloud,interpolation='bilinear')plt.axis('off')plt.show()#保存词云图wordcloud.to_file("wordcloud.png")如果前面参数都是按着我的来设置的话,这里直接复制粘贴就好总结fromwordcloudimportWordCloud,STOPWORDSimportmatplotlib.pyplotaspltimportnumpyasnpimportjieba.possegaspsegfromcollectionsimportCounterimportPIL.ImageasImagefrommatplotlibimportcolors#阅读文本(这里yourfile.txt,根据文本所在具体位置进行设置)text=open("yourfile.txt",encoding="utf-8").read()words=pseg.cut(text)#按指定长度和词性提取词report_words=[]forword,flaginwords:if(len(word)>=2)and('n'inflag):#这里设置统计的字数report_words.append(word)#统计高频词汇result=Counter(report_words).most_common(200)#词的个数#建立词汇字典content=dict(result)#输出词频统计结果foriinrange(50):word,flag=result[i]print("{0:5}".format(word,flag))#设置停用词stopwords=set(STOPWORDS)stopwords.update(["的","感谢","我代表","以上","报告","表示诚挚感谢","战略"])#设置png掩膜(yourfile.png根据实际路径进行替换)background=Image.open("yourfile.png").convert('RGB')mask=np.array(background)'''#如果当前位深是32的话,可以不用写转RGBA模式的这一句,但是写上也没啥问题#从RGB(24位)模式转成RGBA(32位)模式img=Image.open("yourfile.png").convert('RGBA')W,L=img.sizewhite_pixel=(0,0,0,0)#白色forhinrange(W):foriinrange(L):ifimg.getpixel((h,i))==white_pixel:img.putpixel((h,i),(255,255,255,0))#设置透明img.save("yourfile_new.png")#自己设置保存地址'''#设置字体样式路径font_path=r"C:\Windows\Fonts\STLITI.TTF"#设置字体大小max_font_size=200min_font_size=10#建立颜色数组,可更改颜色color_list=['#FF274B']#调用颜色数组colormap=colors.ListedColormap(color_list)#生成词云wordcloud=WordCloud(scale=4,#输出清晰度font_path=font_path,#输出路径colormap=colormap,#字体颜色width=1600,#输出图片宽度height=900,#输出图片高度background_color='white',#图片背景颜色stopwords=stopwords,#停用词mask=mask,#掩膜max_font_size=max_font_size,#最大字体大小min_font_size=min_font_size)#最小字体大小wordcloud.generate_from_frequencies(content)#使用matplotlib显示词云plt.imshow(wordcloud,interpolation='bilinear')plt.axis('off')plt.show()#保存词云图wordcloud.to_file("wordcloud.png") 生成示例推荐阅读POI零代码获取:POI零代码获取
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-9 20:33 , Processed in 0.880055 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表