查看全课大纲(第 26 / 45 节)
- 1.课程简介
- 2.环境搭建
- 3.预备知识
- 4.pyecharts初体验
- 5.数据可视化概述
- 6.数据可视化的目标和作用
- 7.数据可视化工具对比分析
- 8.数据可视化基本流程
- 9.数据可视化设计原则
- 10.pyecharts简介
- 11.官方图表样例
- 12.常用图表的基本结构
- 13.数据格式
- 14.图表的分类
- 15.柱状图与条形图
- 16.其他对比图表
- 17.常用配置项(一)
- 18.常用配置项(二)
- 19.折线图 面积图
- 20.K线图
- 21.其他时间图表
- 22.常用配置项
- 23.散点图 气泡图
- 24.热力图
- 25.其他相关性图表
- 26.饼图
- 27.矩形树图
- 28.其他成分比例图表
- 29.箱型图与直方图
- 30.3D柱状图与折线图
- 31.其他统计图表
- 32.地图 Map
- 33.地理坐标系Geo
- 34.3D 地图
- 35.网络关系图
- 36.主题河流图
- 37.词云图
- 38.组合图表组件
- 39.仪表盘相关图表
- 40.项目介绍
- 41.数据准备
- 42.子图制作(一)
- 43.子图制作(二)
- 44.数据大屏制作
- 45.项目总结
饼图
饼图:展现数据构成的基础工具
小象实战讲义 · ECharts 数据可视化
在数据分析中,我们常常需要了解各个组成部分在整体中的占比情况。例如,不同产品类别的销售额占比、用户来源渠道的分布、项目预算的分配等。饼图(Pie Chart)正是为这类“成分比例”可视化需求而生的经典图表。本节我们将学习如何使用 pyecharts 绘制基础饼图及其变体——圆环图,并掌握如何通过标签配置项清晰地展示数据信息。
💡 核心导读
- 图表定位:饼图用于展示单一维度下,不同分类数据相对于总数的占比情况,通过扇形面积直观对比。
- 适用与禁忌:适用于无零值或负值的数据;分类不宜过多(通常不超过9个);不适用于多分类数据的直接比较。
- 数据格式:pyecharts 饼图接收的数据格式为“列表的列表”,例如
[[‘分类A‘, 100], [‘分类B‘, 200]]。 - 标签定制:通过
LabelOpts(formatter=‘...‘)中的{a},{b},{c},{d}占位符,可以灵活定义悬停和标签显示的文本内容。 - 圆环图绘制:在饼图基础上,通过
radius参数设置内径和外径的比例,即可轻松转换为视觉上更聚焦的圆环图。
1. 理解饼图:何时用,何时不用
饼图通过将一个圆形划分为多个扇形区块来呈现数据。整个圆形代表数据的总量,每个扇形区块的弧长(或面积)大小则对应其分类在总量中所占的比例。所有区块的比例之和为100%。
它的核心价值在于直观地展现“部分与整体”的关系。例如,在查看不同手机品牌的销量占比时,一眼就能看出哪个品牌市场份额最大。
然而,饼图也有其明确的适用边界:
- 数据要求:数据中不应包含零值或负值,因为扇形面积无法有意义地表示这些数值。
- 分类数量:分类不宜过多。当分类超过7-9个时,许多扇形会变得非常细小,难以辨认和比较,反而会削弱图表的可读性。此时,考虑使用百分比柱状图可能更合适。
- 比较场景:饼图擅长展示一个数据系列内部的构成,但不适合直接比较多个不同系列之间的构成差异(例如,比较A公司和B公司各自的部门预算占比)。虽然可以并排放置多个饼图,但对比效果通常不如分组柱状图直观。
2. 绘制基础饼图
在 pyecharts 中,绘制图表遵循“准备数据 -> 创建图表对象 -> 添加数据与配置 -> 渲染”的通用流程。对于饼图,数据需要处理成特定的格式。
首先,我们引入必要的模块,并准备一份示例数据。为了避免随机性,我们这里使用硬编码数据。
from pyecharts import options as opts
from pyecharts.charts import Pie
pie_data = [
["小米", 140],
["OPPO", 28],
["vivo", 65],
["魅族", 20],
["三星", 95],
["苹果", 200],
["华为", 150],
]
label_formatter = "{b}: {c} ({d}%)"
# 基础饼图:默认标签
pie_chart = (
Pie()
.add(series_name="手机品牌", data_pair=pie_data)
.set_global_opts(title_opts=opts.TitleOpts(title="各品牌手机销量占比"))
.set_series_opts(label_opts=opts.LabelOpts(is_show=True))
)
# 定制标签:同时显示名称、数值和百分比
pie_chart_custom_label = (
Pie()
.add("手机品牌", pie_data)
.set_global_opts(title_opts=opts.TitleOpts(title="定制标签的饼图"))
.set_series_opts(label_opts=opts.LabelOpts(formatter=label_formatter, is_show=True))
)
# 圆环图:用内、外半径控制空心区域和环宽
radius = ["40%", "70%"]
doughnut_chart = (
Pie()
.add("手机品牌", pie_data, radius=radius)
.set_global_opts(title_opts=opts.TitleOpts(title="圆环图示例"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%"))
)
# 只需验证图表能否正常生成,不读取 options 中的嵌套配置
for chart in (pie_chart, pie_chart_custom_label, doughnut_chart):
chart.render_embed()
print(f"图表类型: {type(pie_chart).__name__}")
print(f"包含数据分类数: {len(pie_data)}")
print(f"定制标签格式: {label_formatter}")
print(f"圆环内/外半径: {radius[0]} / {radius[1]}")图表类型: Pie
包含数据分类数: 7
定制标签格式: {b}: {c} ({d}%)
圆环内/外半径: 40% / 70%这段代码创建了一个基础的饼图。add() 方法中的 data_pair 参数接收的就是我们准备好的 pie_data。set_series_opts 中的 LabelOpts(is_show=True) 确保了每个扇形上会显示对应的分类名称。
运行后,你将得到一个交互式饼图。将鼠标悬停在任意扇形上,会触发高亮并显示该分类的详细信息(名称和数值)。这就是 ECharts 默认提供的交互体验。
3. 定制标签:使用 formatter 清晰表达
默认的标签显示可能不符合我们的需求,比如我们可能希望同时显示数值和百分比。这时就需要用到标签格式器 formatter。
在 pyecharts (对应 ECharts) 的饼图标签配置中,预定义了几个变量可供调用:
{a}:系列名称(series name),本例中是“手机品牌”。{b}:数据项名称(data item name),即分类名称,如“小米”。{c}:数值(value),如 140。{d}:百分比(percentage),如 20.5%。
注意:{d} 是饼图、漏斗图等比例图表特有的占位符,在折线图、散点图中不可用。
让我们修改标签,使其显示“品牌:数值 (百分比%)”的格式。上面的主示例已经把该格式保存在 label_formatter 并应用到 pie_chart_custom_label,无需再拆出依赖前块变量的代码。
通过 formatter=“{b}: {c} ({d}%)“,我们指定了标签的显示模板。现在,每个扇形上会直接显示例如“小米: 140 (20.0%)”这样的信息,使得图表的信息量更加丰富和直观。formatter 支持字符串拼接,你可以根据需要自由组合这些占位符和文字。
4. 绘制圆环图
圆环图(Doughnut Chart)是饼图的一种变体,它将饼图的中心部分挖空。这种设计有时能减少视觉压力,并在中心区域留出空间,可用于放置总计数据或其他关键信息。
在 pyecharts 中,将饼图转换为圆环图非常简单,只需在 add() 方法中指定 radius 参数。
radius 参数接受一个列表,例如 [‘50%‘, ‘70%‘]:
- 第一个值
‘50%‘表示内半径,即空心部分半径占整个容器半径的比例。 - 第二个值
‘70%‘表示外半径,即整个圆环外缘半径占容器半径的比例。 - 调整这两个值,可以控制环的粗细。当内半径为
‘0%‘时,就是标准的饼图。
上面的 doughnut_chart 已经通过 radius=["40%", "70%"] 完成圆环图构建。代码先验证三个图表都能生成 HTML,再只打印稳定的类型、分类数、标签模板和半径摘要。
通过设置 radius=[“40%“, “70%“],我们得到了一个环宽为容器半径30%的圆环图。你可以尝试调整这两个百分比,观察环的粗细变化,例如 [“20%“, “50%“] 会得到一个更细的环,[“0%“, “60%“] 则相当于一个较小的饼图。
📝 动手练一练
- 数据准备练习:假设你有一份字典格式的销售数据
sales = {‘产品A‘: 300, ‘产品B‘: 150, ‘产品C‘: 450, ‘产品D‘: 100}。请编写代码,将其转换为 pyecharts 饼图所需的data_pair格式(列表的列表)。
点击查看参考答案
sales = {'产品A': 300, '产品B': 150, '产品C': 450, '产品D': 100}
# 使用列表推导式将字典转换为列表的列表
pie_data_from_dict = [[k, v] for k, v in sales.items()]
print(pie_data_from_dict)输出:
[['产品A', 300], ['产品B', 150], ['产品C', 450], ['产品D', 100]]- 标签定制练习:使用上面转换好的数据,绘制一个饼图,要求标签显示为“产品名称 (占比)”,例如“产品A (33.3%)”。(提示:只使用
{b}和{d}占位符)。
点击查看参考答案
from pyecharts import options as opts
from pyecharts.charts import Pie
sales_data = [['产品A', 300], ['产品B', 150], ['产品C', 450], ['产品D', 100]]
practice_chart = (Pie()
.add("", sales_data)
.set_series_opts(
label_opts=opts.LabelOpts(formatter="{b} ({d}%)")
)
)
# 生成图表(在支持的环境下)
# practice_chart.render('practice_pie.html')
print("标签格式器已设置为: {b} ({d}%)")标签格式器已设置为: {b} ({d}%)本章小结
本节我们学习了成分比例可视化的入门图表——饼图及其变体圆环图。你掌握了如何根据数据关系选择合适的图表,理解了饼图的数据格式要求,并学会了通过 formatter 灵活配置标签,以及使用 radius 参数绘制圆环图。
📋 行动清单
- 在本地或在线环境中,运行本节的所有代码示例,观察生成的饼图和圆环图。
- 尝试修改
formatter字符串,例如改为“{a}系列-{b}的销量是{c}台”,观察图表标签的变化。 - 调整圆环图的
radius参数,如设为[‘30%‘, ‘80%‘]或[‘0%‘, ‘60%‘],直观感受内、外半径对图表形态的影响。
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

