当前位置:首页 > 文章列表 > 文章 > python教程 > Python词云制作教程与参数详解

Python词云制作教程与参数详解

2025-07-06 16:54:24 0浏览 收藏

本教程深入解析Python词云制作,以wordcloud库为核心,详细讲解了font_path、background_color、width、height、max_words、stopwords、mask等关键参数的用法。从安装必要的wordcloud、matplotlib和jieba库开始,逐步引导你完成中文文本分词、WordCloud对象创建及参数设置,最终使用matplotlib展示词云。教程还着重介绍了如何通过font_path参数自定义字体以解决中文乱码问题,以及如何利用mask参数加载背景图片,实现词云形状的个性化定制。此外,文章还提供了停用词自定义等优化技巧,助你打造更具聚焦性和美观性的词云,轻松掌握Python词云制作的核心技术。

Python制作词云的核心在于wordcloud库,其关键参数包括font_path、background_color、width、height、max_words、stopwords、mask等。要生成词云,首先需安装wordcloud、matplotlib和jieba库;其次对中文文本进行分词处理;接着创建WordCloud对象并设置相关参数;最后使用matplotlib显示结果。自定义字体通过font_path参数实现,确保中文字体正常显示;背景图片则通过mask参数加载图片数组实现形状控制。常见挑战如中文乱码可通过正确配置字体解决,停用词问题可通过自定义stopwords集合过滤无关词汇,从而提升词云的聚焦性和美观性。

如何使用Python制作词云?wordcloud库参数详解

Python制作词云,核心在于wordcloud库。它能将文本数据转化为视觉上引人注目的图像,直观展示词频,让你一眼就能抓住文本的重点。这东西用起来比想象中要简单,但要做出彩,还是得花点心思。

如何使用Python制作词云?wordcloud库参数详解

解决方案

要制作词云,你需要先安装必要的库:wordcloudmatplotlib(用于显示图片)以及jieba(处理中文文本,因为它默认不分词)。

如何使用Python制作词云?wordcloud库参数详解
# 如果你还没安装,先运行这行
# pip install wordcloud matplotlib jieba

from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba # 用于中文分词

# 1. 准备文本数据
text = """
词云是一种非常酷的数据可视化方式,它能把大量文本数据中的高频词汇以大小不同的字体展现出来,
词频越高,字体越大。我个人觉得,这不仅仅是技术,更是一种艺术。
比如,你分析用户评论,或者读一份冗长的报告,
词云能帮你快速抓住核心关键词,省去了逐字逐句阅读的麻烦。
当然,要做好一个词云,选词、去停用词、字体选择,甚至背景图,都挺有讲究的。
有时候,一个好的词云设计,比纯粹的数据表格更能打动人。
它不仅仅是展示数据,更是在讲述一个故事。
"""

# 2. (可选)中文文本分词
# 如果是英文,这一步可以跳过。中文必须分词,否则词云会把每个汉字当成一个词。
seg_list = jieba.cut(text, cut_all=False) # 精确模式分词
text_after_segmentation = " ".join(seg_list)

# 3. 创建WordCloud对象并生成词云
# 这里可以设置一些基本参数,后面会详细讲。
wordcloud = WordCloud(
    font_path='SimHei.ttf', # 确保你有这个字体文件,或指定你系统里的其他中文字体
    background_color="white", # 背景颜色
    width=800, # 图片宽度
    height=600, # 图片高度
    max_words=200, # 最多显示的词数
    margin=2, # 词语之间的距离
    random_state=42 # 随机状态,保证每次生成的词云形状一致
)

wordcloud.generate(text_after_segmentation) # 生成词云

# 4. 显示词云图片
plt.figure(figsize=(10, 8)) # 设置图片大小
plt.imshow(wordcloud, interpolation='bilinear') # 显示图片
plt.axis("off") # 不显示坐标轴
plt.show()

词云制作:Python wordcloud库的核心参数有哪些?

wordcloud库的强大之处,很大程度上就体现在它那一大堆可调节的参数上。这些参数就像是画家的调色板,能让你把控最终词云的方方面面。我个人觉得,理解并灵活运用这些参数,是把词云从“能用”变成“好用”的关键。

  • widthheight: 这俩参数决定了你词云图片的尺寸。默认是400x200。调大一点,比如800x600甚至更高,词语排布会更疏朗,细节也能看得更清楚。我通常会根据最终用途来定,比如要打印出来,肯定得大点。
  • background_color: 顾名思义,背景颜色。可以是颜色名(如"white", "black"),也可以是十六进制颜色码。个人偏好白色或浅灰色,这样词语的对比度高,看着舒服。当然,如果你想玩点花样,深色背景配亮色字体也挺酷。
  • max_words: 词云里最多显示多少个词?这个参数控制了词云的“密度”。词越多,词云可能就越拥挤。我觉得200-500个词比较合适,太多了反而容易让人眼花缭乱。
  • stopwords: 停用词表。这是个非常重要的参数!它接受一个集合(set)类型的数据,里面是你不想在词云中出现的词,比如中文的“的”、“是”、“了”,英文的“a”、“the”、“is”等等。我发现很多时候,默认的停用词表根本不够用,总有些你不想看到的词混在里面,手动添加进去就清爽多了。你可以自己定义一个set,比如my_stopwords = {"的", "是", "了", "我"},然后传给它。
  • font_path: 字体路径。这个对中文词云来说简直是生命线! 如果不指定一个包含中文字符的字体,你的词云里就全是小方块。你需要提供一个TTF字体文件的路径,比如Windows系统下的SimHei.ttf(黑体)或者msyh.ttc(微软雅黑)。Linux或macOS用户也需要找到对应的中文字体文件。
  • mask: 遮罩图片。这是个高级玩法,能让你的词云呈现出特定形状。你需要提供一个灰度图或带透明通道的图片(比如PNG),词云会根据图片的非透明部分来填充词语。这个我后面会专门讲,因为用起来有点小技巧。
  • colormap: 颜色映射。它决定了词云中词语的颜色方案。matplotlib提供了很多内置的colormap,比如'viridis', 'plasma', 'inferno'等等。如果你不指定,它会随机生成颜色。我喜欢尝试不同的colormap,看看哪种最能突出主题或者最符合我的审美。
  • max_font_sizemin_font_size: 控制词语字体大小的上下限。如果你觉得有些词太小看不清,或者最大的词占了太多空间,可以调整这两个参数。
  • random_state: 随机种子。如果你希望每次运行代码生成的词云形状和排布都一模一样,就设置一个整数值。这在调试和复现结果时特别有用。

如何为Python词云添加自定义字体和背景图片?

让词云从“标准版”升级到“定制版”,字体和背景图片是两个非常有效的途径。特别是对中文词云而言,字体选择的重要性不亚于文本内容本身。

如何使用Python制作词云?wordcloud库参数详解

1. 自定义字体:告别方块字

前面提到了font_path的重要性。没有合适的字体,中文词云就是一堆方块,那感觉真是...一言难尽。所以,你需要确保你的系统里有可用的中文字体文件(.ttf.ttc格式),然后把它的绝对路径或者相对路径传给font_path参数。

Windows用户通常可以在C:\Windows\Fonts目录下找到字体文件,比如simhei.ttf(黑体)、msyh.ttc(微软雅黑)。 macOS用户可以在~/Library/Fonts/Library/Fonts找到。 Linux用户则可能在/usr/share/fonts下。

# 假设你的中文字体文件在当前目录下,或者你提供了完整的路径
font_path = 'SimHei.ttf' # 替换成你实际的字体文件路径
# 或者
# font_path = 'C:/Windows/Fonts/simhei.ttf' # Windows示例
# font_path = '/System/Library/Fonts/STHeiti Light.ttc' # macOS示例

wordcloud = WordCloud(
    font_path=font_path,
    background_color="white",
    width=800,
    height=600
    # ... 其他参数
).generate(text_after_segmentation)

2. 自定义背景图片:塑造词云的形状

mask参数允许你用一张图片来定义词云的形状。它会把词语填充到图片中非透明(或非白色)的区域。这功能简直是创意无限的源泉!

你需要先用imageioPIL(Pillow)库加载图片,然后将其转换为NumPy数组。注意:图片最好是黑白分明的,或者有透明背景的PNG图。 词云会根据图片的亮度来决定词语的填充区域,通常是白色区域不填充,非白色区域填充。如果你的图片是彩色的,wordcloud会将其转换为灰度图处理。

from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image # 需要安装 Pillow: pip install Pillow

# 假设你有一张名为 'heart.png' 的图片作为遮罩
# 这张图片最好是白色背景,黑色或彩色形状的图片,或者带透明度的PNG
mask_image_path = 'heart.png' # 替换成你的图片路径

# 加载图片并转换为NumPy数组
# Image.open().convert("RGBA") 可以确保图片有透明通道,如果原始图片没有,它会添加一个。
# np.array() 将PIL图片对象转换为NumPy数组
mask = np.array(Image.open(mask_image_path))

# 准备文本数据(同上)
text = "..." # 你的文本数据
seg_list = jieba.cut(text, cut_all=False)
text_after_segmentation = " ".join(seg_list)

wordcloud_masked = WordCloud(
    font_path='SimHei.ttf',
    background_color="white",
    mask=mask, # 将加载的图片数组作为mask
    max_words=500,
    stopwords={"的", "是", "了", "我", "你", "我们", "他们"}, # 自定义停用词
    contour_width=3, # 词云轮廓线宽度
    contour_color='steelblue' # 词云轮廓线颜色
)

wordcloud_masked.generate(text_after_segmentation)

# 如果你的遮罩图片本身有颜色,并且你想让词云的颜色也从图片中提取,可以使用 ImageColorGenerator
# image_colors = ImageColorGenerator(mask)
# plt.imshow(wordcloud_masked.recolor(color_func=image_colors), interpolation="bilinear")

plt.figure(figsize=(10, 8))
plt.imshow(wordcloud_masked, interpolation='bilinear')
plt.axis("off")
plt.show()

我用contour_widthcontour_color给遮罩加了个边框,有时候这样能让形状更突出,效果也挺不错的。

Python词云生成中常见的挑战与优化技巧?

在实际操作中,你可能会遇到一些让人挠头的问题,比如中文乱码、不想要的词出现,或者词云形状不尽如人意。这些都是很常见的挑战,但都有对应的优化技巧。

1. 中文乱码问题:字体是根本

这是最常见也最让人头疼的问题。如果你在词云中看到一堆小方块而不是汉字,那基本可以确定是font_path没设置对,或者你指定的字体文件不包含中文字符集。

  • 解决方案: 确保你提供的font_path指向一个真实存在且支持中文的TTF或TTC字体文件。在Windows上,SimHei.ttf(黑体)是个不错的选择;macOS用户可能需要查找系统自带的思源黑体或华文黑体。如果你不确定,可以去网上下载一个免费的开源中文字体,比如“霞鹜文楷”或“得意黑”,然后指定其路径。

2. 停用词处理:让词云更聚焦

默认的wordcloud库自带一些英文停用词,但对于中文文本,或者某些特定领域的分析,你往往需要更定制化的停用词表。那些高频但无意义的词,比如“的”、“是”、“了”、“一个”等等,如果不去掉,它们会占据词云的大部分空间,掩盖了真正有价值的信息。

  • 解决方案:
    • 自定义停用词列表: 创建一个Python的set,把所有你想过滤掉的词放进去。
      my_stopwords = {"的", "是", "了", "我", "你", "他", "她", "它", "我们", "你们", "他们", "和", "或", "一个", "这种", "那种", "什么", "怎么", "如何", "这样", "那样", "可以", "会", "就是", "所以", "但是", "而且", "然而", "因为", "所以", "如果", "那么", "虽然", "但是", "并且", "或者", "除了", "为了", "关于", "对于", "已经", "正在", "将会", "非常", "特别", "很", "比较", "更", "最", "都", "也", "还", "再", "又", "就", "才", "只", "总是", "常常", "往往", "总是", "有时候", "从来", "从不", "一定", "肯定", "大概", "可能", "也许", "当然", "确实", "真的", "简直", "根本", "一点", "一些", "很多", "许多", "很少", "很少", "多少", "每个", "所有", "各种", "一切", "任何", "任何", "自己", "别人", "大家", "各位", "先生", "女士", "小姐", "同志", "朋友", "老师", "学生", "医生", "工人", "农民", "解放军", "警察", "记者", "律师", "工程师", "科学家", "艺术家", "运动员", "总统", "总理", "部长", "主席", "委员", "代表", "领导", "成员", "单位", "部门", "公司", "企业", "学校", "医院", "银行", "商店", "饭店", "宾馆", "旅馆", "酒店", "公寓", "住宅", "别墅", "农村", "城市", "国家", "地区", "世界", "全国", "各地", "地方", "方面", "部分", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面", "方面

理论要掌握,实操不能落!以上关于《Python词云制作教程与参数详解》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

PHP读写YAML文件全攻略PHP读写YAML文件全攻略
上一篇
PHP读写YAML文件全攻略
Win10音量图标消失怎么找回
下一篇
Win10音量图标消失怎么找回
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    509次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • AI边界平台:智能对话、写作、画图,一站式解决方案
    边界AI平台
    探索AI边界平台,领先的智能AI对话、写作与画图生成工具。高效便捷,满足多样化需求。立即体验!
    37次使用
  • 讯飞AI大学堂免费AI认证证书:大模型工程师认证,提升您的职场竞争力
    免费AI认证证书
    科大讯飞AI大学堂推出免费大模型工程师认证,助力您掌握AI技能,提升职场竞争力。体系化学习,实战项目,权威认证,助您成为企业级大模型应用人才。
    65次使用
  • 茅茅虫AIGC检测:精准识别AI生成内容,保障学术诚信
    茅茅虫AIGC检测
    茅茅虫AIGC检测,湖南茅茅虫科技有限公司倾力打造,运用NLP技术精准识别AI生成文本,提供论文、专著等学术文本的AIGC检测服务。支持多种格式,生成可视化报告,保障您的学术诚信和内容质量。
    183次使用
  • 赛林匹克平台:科技赛事聚合,赋能AI、算力、量子计算创新
    赛林匹克平台(Challympics)
    探索赛林匹克平台Challympics,一个聚焦人工智能、算力算法、量子计算等前沿技术的赛事聚合平台。连接产学研用,助力科技创新与产业升级。
    265次使用
  • SEO  笔格AIPPT:AI智能PPT制作,免费生成,高效演示
    笔格AIPPT
    SEO 笔格AIPPT是135编辑器推出的AI智能PPT制作平台,依托DeepSeek大模型,实现智能大纲生成、一键PPT生成、AI文字优化、图像生成等功能。免费试用,提升PPT制作效率,适用于商务演示、教育培训等多种场景。
    204次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码