查看全课大纲(第 18 / 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 数据可视化
在上一节中,我们学习了如何为图表添加标题、副标题以及动画效果。本节我们将深入探索更多强大的配置项,它们能显著提升图表的交互性与信息表达能力。通过配置区域缩放、坐标轴、工具箱以及系列级别的标签、标记线和标记点,你将能够制作出既能宏观浏览、又能微观洞察,且自带丰富分析工具的专业级图表。
💡 核心导读
- 区域缩放 (DataZoom):掌握滑动条 (
slide) 与内置缩放 (inside) 两种模式,实现图表数据的动态聚焦,尤其适用于时间序列数据的细节探索。 - 坐标轴与工具箱配置:学会为坐标轴命名,并启用功能强大的工具箱,实现图表保存、视图切换、数据查看等便捷操作。
- 系列配置项:灵活运用标签 (
LabelOpts)、标记线 (MarkLineOpts) 和标记点 (MarkPointOpts),直接在图表上高亮关键数据(如最大值、最小值、平均值或自定义阈值),增强数据的解读性。
1. 区域缩放配置项 (DataZoom)
当图表中的数据点过多,尤其是时间序列数据跨度很大时,我们常常需要关注某个特定时间段或数据区间的细节。DataZoom(区域缩放)配置项就是为了解决这个问题而生的。
在 pyecharts 中,DataZoomOpts 通常通过 set_global_opts() 方法进行全局配置。它主要有两种类型:
type_='slider':在图表下方(或指定位置)显示一个可拖动的滑动条,用户通过拖动滑块来改变显示的数据范围。这是默认类型。type_='inside':内置缩放,用户将鼠标悬停在图表区域内,通过滚动鼠标滚轮即可进行缩放,界面更简洁。
下面我们通过一个柱状图示例来演示这两种效果。首先,我们创建一组模拟的时间序列数据。
# 导入必要的库
from pyecharts import options as opts
from pyecharts.charts import Bar
import pandas as pd
# 模拟时间序列数据:2024年1月到12月的两组数据
months = [f'{i}月' for i in range(1, 13)]
data_a = [45, 78, 56, 89, 67, 92, 110, 85, 73, 101, 88, 95]
data_b = [32, 65, 48, 76, 59, 81, 99, 70, 62, 87, 75, 82]
# 创建基础柱状图
bar_with_datazoom = (
Bar()
.add_xaxis(months)
.add_yaxis("产品A销量", data_a)
.add_yaxis("产品B销量", data_b)
.set_global_opts(
title_opts=opts.TitleOpts(title="2024年月度销量对比"),
# 配置一个滑动条式的区域缩放
datazoom_opts=opts.DataZoomOpts(), # 默认即为 type_='slider'
)
)
# 生成HTML文件并打印配置摘要
bar_with_datazoom.render("bar_with_slider.html")
print(f"图表类型: {type(bar_with_datazoom).__name__}")
print(f"X轴数据点: {len(months)} 个")
print(f"已配置 DataZoom 类型: slider")图表类型: Bar
X轴数据点: 12 个
已配置 DataZoom 类型: slider运行上述代码后,生成的图表下方会出现一个滑动条。拖动滑块,可以看到图表显示的月份范围随之变化,实现了对数据的“放大”和“缩小”查看。
接下来,我们体验 inside 类型,并演示如何同时使用两种缩放方式。
# 创建同时支持滑块和滚轮缩放的图表
bar_with_both_zoom = (
Bar()
.add_xaxis(months)
.add_yaxis("产品A销量", data_a)
.add_yaxis("产品B销量", data_b)
.set_global_opts(
title_opts=opts.TitleOpts(title="2024年月度销量对比 (双缩放模式)"),
# 同时配置 slider 和 inside 类型的 DataZoom
datazoom_opts=[
opts.DataZoomOpts(), # 滑块
opts.DataZoomOpts(type_="inside"), # 滚轮
]
)
)
bar_with_both_zoom.render("bar_with_both_zoom.html")
print(f"图表类型: {type(bar_with_both_zoom).__name__}")
print(f"已配置 DataZoom 数量: 2 个 (slider 和 inside)")现在,你既可以通过底部的滑块控制显示范围,也可以将鼠标移到图表上,用滚轮进行快速缩放,两者是联动的。
此外,DataZoomOpts 还可以通过 orient 参数设置为纵向 (orient='vertical'),放置在图表右侧,用于对 Y 轴数值范围进行筛选。
# 创建带有纵向Y轴缩放的图表
bar_with_vertical_zoom = (
Bar()
.add_xaxis(months[:6]) # 只使用前6个月数据,避免过度拥挤
.add_yaxis("产品A销量", data_a[:6])
.add_yaxis("产品B销量", data_b[:6])
.set_global_opts(
title_opts=opts.TitleOpts(title="上半年销量对比 (Y轴缩放)"),
# 配置一个纵向的滑块,用于筛选Y轴数值
datazoom_opts=[opts.DataZoomOpts(orient="vertical", range_start=0, range_end=80)],
)
)
bar_with_vertical_zoom.render("bar_with_vertical_zoom.html")
print(f"图表类型: {type(bar_with_vertical_zoom).__name__}")
print(f"Y轴 DataZoom 初始范围: 0% 到 80%")拖动右侧的纵向滑块,可以过滤掉Y轴上较高或较低的值,这对于快速聚焦于特定数值区间的数据点非常有用。
2. 坐标轴与工具箱配置
2.1 坐标轴配置项 (AxisOpts)
清晰的坐标轴标签是图表可读性的基础。使用 AxisOpts 可以轻松地为坐标轴添加名称、调整标签格式等。
# 配置坐标轴名称
bar_with_axis_name = (
Bar()
.add_xaxis(months[:6])
.add_yaxis("产品A销量", data_a[:6])
.add_yaxis("产品B销量", data_b[:6])
.set_global_opts(
title_opts=opts.TitleOpts(title="坐标轴配置示例"),
# 配置X轴和Y轴
xaxis_opts=opts.AxisOpts(name="月份", name_location="middle", name_gap=30),
yaxis_opts=opts.AxisOpts(
name="销量(单位:件)",
# 为Y轴标签添加单位后缀
axislabel_opts=opts.LabelOpts(formatter="{value} 件")
),
)
)
bar_with_axis_name.render("bar_with_axis_name.html")
print(f"X轴名称: 月份")
print(f"Y轴名称: 销量(单位:件)")
print(f"Y轴标签格式: 数值 + '件'")2.2 工具箱配置项 (ToolboxOpts)
工具箱是 ECharts 提供的一个强大交互组件,默认包含保存为图片、数据视图、动态类型切换、数据区域缩放等工具。启用它能为最终用户提供极大的便利。
# 启用默认工具箱
bar_with_toolbox = (
Bar()
.add_xaxis(months[:6])
.add_yaxis("产品A销量", data_a[:6])
.add_yaxis("产品B销量", data_b[:6])
.set_global_opts(
title_opts=opts.TitleOpts(title="工具箱功能演示"),
xaxis_opts=opts.AxisOpts(name="月份"),
yaxis_opts=opts.AxisOpts(name="销量"),
# 启用工具箱
toolbox_opts=opts.ToolboxOpts(),
)
)
bar_with_toolbox.render("bar_with_toolbox.html")
print(f"已启用工具箱 (ToolboxOpts)")
print(f"工具箱默认包含工具: 保存图片、还原、数据视图、动态类型切换等")生成的图表右上角会出现工具箱图标,点击后可以看到一系列工具:
- 保存图片:将当前图表视图导出为 PNG 格式的图片。
- 还原:重置所有交互操作(如缩放、图例筛选)到初始状态。
- 数据视图:在弹窗文本域中查看原始数据;开启编辑后,可修改数据并刷新回写到图表。
- 切换为折线图/柱状图/堆叠图:动态改变图表的展示类型。
你可以通过 feature 参数来定制工具箱中显示哪些功能,例如只保留“保存图片”和“数据视图”。
3. 系列配置项:标签、标记线与标记点
系列配置项作用于具体的某个数据系列,用于精细化控制该系列的表现形式。最常用的包括标签、标记线和标记点。
3.1 标签配置项 (LabelOpts)
标签用于在图形元素(如柱子的顶端)上显示其代表的具体数值。你可以控制其显示与否、字体、颜色、位置等。
# 控制标签的显示与样式
bar_with_label_config = (
Bar()
.add_xaxis(months[:6])
.add_yaxis("产品A销量", data_a[:6])
.add_yaxis("产品B销量", data_b[:6])
.set_global_opts(title_opts=opts.TitleOpts(title="标签配置示例"))
.set_series_opts(
# 配置系列标签
label_opts=opts.LabelOpts(
is_show=True, # 显示标签
position="top", # 标签位置在柱子顶部
font_size=12,
color="auto", # 自动适应系列颜色
# formatter 可以自定义标签显示内容,例如:{c} 代表数据值
# formatter="{c}件"
)
)
)
bar_with_label_config.render("bar_with_label_config.html")
print(f"标签配置: 显示,位置顶部,字体大小12")
# 注意:当数据密集时,建议将 is_show 设为 False 以避免视觉混乱。3.2 标记线配置项 (MarkLineOpts)
标记线用于在图表中绘制一条或多条参考线,以突出显示特定的阈值或统计值(如平均值、最小值、最大值或自定义数值)。这对于设定目标线或警示线非常有用。
# 添加标记线:平均线和自定义目标线
bar_with_markline = (
Bar()
.add_xaxis(months[:6])
.add_yaxis("产品A销量", data_a[:6])
.add_yaxis("产品B销量", data_b[:6])
.set_global_opts(title_opts=opts.TitleOpts(title="标记线配置示例"))
.set_series_opts(
label_opts=opts.LabelOpts(is_show=False), # 隐藏数值标签,让标记线更清晰
# 配置标记线
markline_opts=opts.MarkLineOpts(
data=[
opts.MarkLineItem(type_="average", name="平均值"),
opts.MarkLineItem(y=80, name="目标线"),
],
# 可以设置线的样式
linestyle_opts=opts.LineStyleOpts(type_="dashed", color="red", width=2),
)
)
)
bar_with_markline.render("bar_with_markline.html")
print(f"标记线1: 类型=average, 名称=平均值")
print(f"标记线2: Y值=80, 名称=目标线")
print(f"线样式: 虚线,红色,宽度2")运行后,图表中会为“产品A”和“产品B”两个系列分别绘制一条代表各自平均值的虚线,以及一条Y=80的红色目标虚线。将鼠标悬停在线上可以看到具体信息。
3.3 标记点配置项 (MarkPointOpts)
与标记线类似,标记点用于高亮显示数据系列中的特殊点,如最大值、最小值、平均值等。
# 添加标记点:最大值、最小值和平均值
bar_with_markpoint = (
Bar()
.add_xaxis(months[:6])
.add_yaxis("产品A销量", data_a[:6])
.add_yaxis("产品B销量", data_b[:6])
.set_global_opts(title_opts=opts.TitleOpts(title="标记点配置示例"))
.set_series_opts(
label_opts=opts.LabelOpts(is_show=False),
# 配置标记点
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(type_="max", name="最大值"),
opts.MarkPointItem(type_="min", name="最小值"),
opts.MarkPointItem(type_="average", name="平均值"),
],
# 可以设置点的符号和大小
symbol="pin", # 图钉形状
symbol_size=50,
)
)
)
bar_with_markpoint.render("bar_with_markpoint.html")
print(f"标记点类型: max, min, average")
print(f"标记点符号: pin,大小: 50")图表中会在每个系列的最大值、最小值和平均值对应的柱子上方显示一个图钉状的标记点,鼠标悬停可查看具体数值。
📝 动手练一练
- 组合配置:创建一个折线图,展示某产品一周(周一至周日)的日活跃用户数(数据自拟)。要求:
- 启用工具箱。
- 为X轴和Y轴添加合适的名称。
- 添加一条代表“周平均活跃用户”的标记线。
- 用标记点标出“最高日活”和“最低日活”。
点击查看参考答案
from pyecharts import options as opts
from pyecharts.charts import Line
# 模拟数据
days = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
dau = [1200, 1350, 1100, 1450, 1600, 1800, 1500] # 日活跃用户
line_chart = (
Line()
.add_xaxis(days)
.add_yaxis("日活跃用户", dau, is_smooth=True)
.set_global_opts(
title_opts=opts.TitleOpts(title="产品周活跃用户趋势"),
xaxis_opts=opts.AxisOpts(name="星期"),
yaxis_opts=opts.AxisOpts(name="用户数"),
toolbox_opts=opts.ToolboxOpts(),
)
.set_series_opts(
label_opts=opts.LabelOpts(is_show=True),
markline_opts=opts.MarkLineOpts(
data=[opts.MarkLineItem(type_="average", name="周平均")]
),
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(type_="max", name="最高"),
opts.MarkPointItem(type_="min", name="最低"),
]
),
)
)
line_chart.render("weekly_dau_exercise.html")
print("图表已生成: weekly_dau_exercise.html")
print(f"数据点: {len(days)} 天")
print(f"最高日活: {max(dau)}")
print(f"最低日活: {min(dau)}")
print(f"平均日活: {sum(dau)/len(dau):.0f}")图表已生成: weekly_dau_exercise.html
数据点: 7 天
最高日活: 1800
最低日活: 1100
平均日活: 1429本章小结
本节我们深入学习了 pyecharts 中几类至关重要的配置项,它们将静态图表转变为功能丰富、交互性强的数据探索工具。
📋 行动清单
- 掌握 DataZoom 的应用场景:在时间序列或数据量大的图表中,熟练添加滑块或内置缩放,提升用户体验。
- 养成配置坐标轴的习惯:为每个坐标轴添加清晰的名称和合适的单位,这是制作专业图表的基本功。
- 善用工具箱与系列配置:在需要交付给他人的图表中启用工具箱;在数据分析图表中,灵活使用标记线和标记点来高亮关键信息(如均值、目标值、极值),让洞察一目了然。
通过本节的学习,你已经掌握了定制化图表外观与交互的核心技能。在接下来的章节中,我们将进入“时间趋势可视化”的世界,学习如何用折线图、面积图等更好地展现数据随时间变化的规律。
—— 小象教研组
