python-pyecharts之词云图

部署运行你感兴趣的模型镜像

目录

  1. 安装 Pyecharts

  2. 准备词云数据

  3. 基本词云图绘制

  4. 自定义词云图样式

  5. 使用自定义图片形状

  6. 从文本生成词频数据

  7. 常见问题与技巧

  8. 完整示例

1. 安装 Pyecharts

首先,确保你的环境中已经安装了 Pyecharts。如果未安装,可以通过 pip 安装:

bash

pip install pyecharts
 

Pyecharts 有两个大版本(v0.5.X 和 v1),它们之间不兼容。v0.5.X 已经停止维护,新版本默认安装 v1(要求 Python 3.6+),因此建议使用 v1 版本。

2. 准备词云数据

词云图需要的数据是一个包含词语及其权重(如频率)的列表,每个元素是一个元组 (词, 权重),或者是一个字典格式。权重值越大,显示的词语字体就越大。

# 示例数据,支持列表嵌套元组形式
data_pairs = [
    ('Python', 1000),
    ('数据可视化', 618),
    ('Pyecharts', 438),
    ('词云图', 405),
    ('数据分析', 246),
    ('机器学习', 210),
    ('大数据', 140),
    ('人工智能', 100)
]

# 若原始数据为字典形式,可转换为上述格式
word_frequencies = {
    "Python": 100,
    "Java": 80,
    "C++": 60,
    "JavaScript": 50,
    "数据分析": 90,
    "机器学习": 70,
    "人工智能": 85,
    "深度学习": 75,
    "区块链": 40,
    "大数据": 60
}
data_pairs = list(word_frequencies.items())  # 转换为统一格式
 

3. 基本词云图绘制

使用 Pyecharts 中的 WordCloud 类可以轻松创建词云图。

from pyecharts.charts import WordCloud
from pyecharts import options as opts

# 初始化词云图
wordcloud = WordCloud()

# 配置数据参数
wordcloud.add(
    series_name="",  # 系列名称(可选)
    data_pair=data_pairs,  # 词频数据
    word_size_range=[20, 100],  # 字号范围
    shape="circle",  # 形状:圆形
)

# 设置全局配置
wordcloud.set_global_opts(
    title_opts=opts.TitleOpts(title="基本词云图示例"),  # 图表标题
)

# 设置系列样式
wordcloud.set_series_opts(
    label_opts=opts.LabelOpts(is_show=False),  # 隐藏标签
)

# 输出HTML文件
wordcloud.render("basic_wordcloud.html")

# Jupyter Notebook中直接显示
# wordcloud.render_notebook()
 

运行上述代码后,会生成一个名为 basic_wordcloud.html 的文件,用浏览器打开即可查看交互式词云图。

4. 自定义词云图样式

Pyecharts 提供了丰富的参数来自定义词云图的样式。

 链式调用写法(更简洁)

custom_wc = (
    WordCloud()
    .add(
        series_name="自定义词云",
        data_pair=data_pairs,
        word_size_range=[15, 80],  # 字体大小范围
        shape="cardioid",  # 心形轮廓
        word_gap=10,  # 词间距
        rotate_step=45,  # 旋转角度增量
        textstyle_opts=opts.TextStyleOpts(
            color=None,  # 默认随机配色
            font_family="Microsoft YaHei",  # 指定字体
            font_size=None  # 字体大小随权重变化
        ),
        emphasis_shadow_blur=10,  # 悬停阴影模糊度
        emphasis_shadow_color="rgba(0, 0, 0, 0.5)"  # 阴影颜色
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="个性化词云图",
            title_textstyle_opts=opts.TextStyleOpts(font_size=30, color="#333"),
            pos_left="center",
            pos_top="top"
        ),
        tooltip_opts=opts.TooltipOpts(is_show=True)  # 启用提示框
    )
    .set_series_opts(
        label_opts=opts.LabelOpts(
            is_show=True,
            position="inside",
            font_size=12,
            formatter="{b}",  # 显示词语文本
            rotate=30,  # 标签旋转
            font_family="Arial"
        )
    )
)

custom_wc.render("custom_wordcloud.html")
 

5. 使用自定义图片形状

除了内置形状,Pyecharts 还支持使用自定义图片作为词云轮廓。

from pyecharts.globals import SymbolType

# 使用内置钻石形状创建词云
diamond_wc = (
    WordCloud()
    .add("", data_pairs, word_size_range=[20, 100], shape=SymbolType.DIAMOND)
    .set_global_opts(title_opts=opts.TitleOpts(title="钻石形状词云"))
)
diamond_wc.render("diamond_wordcloud.html")

# 使用自定义图片作为词云轮廓
# 建议使用背景单一、对比度高的图片(支持jpg/jpeg/png/ico等格式)
custom_shape_wc = (
    WordCloud()
    .add(
        "",
        data_pairs,
        word_size_range=[20, 100],
        mask_image="path/to/your/image.png",  # 替换为实际图片路径
        # 注意:使用mask_image后通常无需再指定shape参数
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="自定义形状词云"))
)
custom_shape_wc.render("custom_shape_wordcloud.html")
 

from pyecharts.globals import SymbolType

# 使用内置符号形状(例如钻石)
shape_wc = (
    WordCloud()
    .add("", data_pairs, word_size_range=[20, 100], shape=SymbolType.DIAMOND)
    .set_global_opts(title_opts=opts.TitleOpts(title="钻石形状词云"))
)
shape_wc.render("shape_wordcloud.html")

# 使用本地图片作为轮廓 (注意:图片背景最好单一,对比度高)
# 支持 jpg, jpeg, png, ico 等格式
image_shape_wc = (
    WordCloud()
    .add(
        "",
        data_pairs,
        word_size_range=[20, 100],
        mask_image="path/to/your/image.png",  # 替换为你的图片路径
        # 注意:使用了 mask_image 后,shape 参数通常就不需要了
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="自定义图片形状词云"))
)
image_shape_wc.render("image_shape_wordcloud.html")

注意:使用 mask_image 参数时,首次渲染可能会遇到词云图空白的情况,这是 ECharts 底层库的一个已知问题,刷新浏览器页面通常即可正常显示。

6. 从文本生成词频数据

在实际应用中,我们通常需要从大段文本(如文章、评论)中提取关键词并统计词频来生成数据。

import jieba  # 中文分词工具
from collections import Counter

# 安装jieba: pip install jieba

def generate_word_freq_from_text(text_path, stopwords_path=None, top_n=200):
    """
    统计文本文件中词语出现频率
    :param text_path: 待处理文本文件路径
    :param stopwords_path: 停用词文件路径(可选)
    :param top_n: 返回高频词数量
    :return: 词频列表 [('词语', 频次), ...],按频次降序排列
    """
    # 读取文本内容
    with open(text_path, 'r', encoding='utf-8') as f:
        text = f.read().replace('\n', '').replace(' ', '')
    
    # 中文分词处理
    seg_list = jieba.cut(text)
    
    # 加载停用词表
    stopwords = set()
    if stopwords_path:
        with open(stopwords_path, 'r', encoding='utf-8') as f:
            stopwords = {line.strip() for line in f}
    
    # 过滤停用词并统计词频
    words = [word for word in seg_list 
             if word not in stopwords and len(word) > 1]  # 过滤单字词
    word_freq = Counter(words)
    
    # 返回最高频的top_n个词
    return word_freq.most_common(top_n)

# 使用示例
# word_freq = generate_word_freq_from_text('文本.txt', '停用词.txt')
# 获取的词频数据可用于生成词云
 

7. 常见问题与技巧

  • 数据格式:确保数据格式是 [('词1', 权重1), ('词2', 权重2), ...] 或由 字典.items() 转换而来的类似形式。

  • 形状选择shape 参数支持多种内置形状,如 'circle''cardioid''diamond''triangle''star''pentagon' 等。

  • 样式调整

    • word_size_range:控制最小和最大字体大小。

    • word_gap:控制词与词之间的间距。

    • rotate_step:控制词语旋转的最大角度。

  • 交互功能:Pyecharts 生成的 HTML 词云图是交互式的,鼠标悬停可以查看词语的权重。

8. 完整示例

下面是一个结合了上述步骤的完整示例:

from pyecharts.charts import WordCloud
from pyecharts import options as opts
import jieba
import collections

# 1. 准备词频数据
word_freq = {
    'Python': 1000, '数据可视化': 618, 'Pyecharts': 438, '词云图': 405,
    '数据分析': 246, '机器学习': 210, '大数据': 140, '人工智能': 100,
    '编程': 95, '开发': 88, '学习': 85, '教程': 80, '代码': 75, '算法': 70
}
word_pairs = list(word_freq.items())

# 2. 构建词云图
wordcloud = (
    WordCloud()
    .add(
        series_name="技术词云",
        data_pair=word_pairs,
        word_size_range=[15, 80],
        shape="diamond",
        word_gap=15,
        rotate_step=20,
        textstyle_opts=opts.TextStyleOpts(font_family="Microsoft YaHei")
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="技术关键词词云",
            title_textstyle_opts=opts.TextStyleOpts(font_size=20)
        ),
        tooltip_opts=opts.TooltipOpts(is_show=True, background_color="rgba(0,0,0,0.7)")
    )
    .set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="inside", formatter="{b}"))
)

# 3. 生成HTML文件
wordcloud.render("technology_wordcloud.html")
print("词云图已保存为 technology_wordcloud.html")
 

您可能感兴趣的与本文相关的镜像

Qwen3-8B

Qwen3-8B

文本生成
Qwen3

Qwen3 是 Qwen 系列中的最新一代大型语言模型,提供了一整套密集型和专家混合(MoE)模型。基于广泛的训练,Qwen3 在推理、指令执行、代理能力和多语言支持方面取得了突破性进展

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值