查看全课大纲(第 14 / 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 数据可视化
在掌握了 pyecharts 的基本构成和数据格式后,面对 ECharts 提供的数十种图表,你是否感到无从下手?本节将为你梳理图表的分类体系,并提供一个清晰的“选图指南”。学完本节,你将能根据手头的数据关系和业务目标,快速锁定最合适的图表类型,为后续的深入学习绘制一张清晰的“地图”。
💡 核心导读
- 分类维度多样:ECharts 图表可从坐标系(直角/极坐标等)、数据关系(比较/分布/构成/联系)等多个维度进行分类,理解不同分类有助于把握图表本质。
- 选图有章可循:核心原则是“数据关系决定图表类型”。例如,比较数据用柱状图/条形图,展示趋势用折线图/面积图,呈现构成用饼图/环形图。
- 课程结构预览:本课程将图表分为项目对比、时间趋势、数据关系、成分比例等九大模块,后续章节将按此体系逐一深入讲解。
- 组合创造价值:复杂的数据故事往往需要将多种基础图表(如折线与柱状图组合)或组件(如地图与视觉映射)进行组合,这是构建数据大屏的核心技能。
一、ECharts 图表的多种分类视角
ECharts(以及其 Python 封装 pyecharts)内置了超过 30 种图表类型。为了系统地学习和应用它们,我们需要从不同角度对其进行分类。
1. 按坐标系与图表形态分类 这是一种直观的技术分类方式:
- 直角坐标系图表:在常见的 X-Y 平面上绘制,包括柱状图 (Bar)、折线图 (Line)、散点图 (Scatter)、K 线图 (Candlestick) 等。它们擅长表现数值与类别、或两个数值维度之间的关系。
- 其他坐标系/布局图表:不依赖于传统直角坐标系,包括:
- 饼图 (Pie) / 环形图 (Ring):采用独立的圆形布局,通过
center和radius定位,不属于直角坐标系或polar极坐标组件。 - 雷达图 (Radar):在多个维度上比较数据点。
- 地图 (Geo/Map):在地理坐标系上展示数据分布。
- 关系图 (Graph):如力导向布局图,展示节点与边的关系网络。
- 仪表盘 (Gauge)、漏斗图 (Funnel) 等特殊用途图表。
- 饼图 (Pie) / 环形图 (Ring):采用独立的圆形布局,通过
2. 按数据关系与业务目标分类(核心选图逻辑) 这是更贴近数据分析实践的分类方法,其核心思想是:你想通过数据回答什么问题? 我们可以将常见的数据分析目标归纳为以下四类,并为每类匹配合适的图表:
| 数据关系 | 核心问题 | 典型图表 | 简单解释 |
|---|---|---|---|
| 比较 (Comparison) | 哪个项目更大/更小?数据如何随时间变化排名? | 柱状图、条形图、折线图、雷达图 | 关心数据系列之间的排名与对比。 |
| 构成 (Composition) | 各部分占总体的百分比是多少?结构如何? | 饼图、环形图、堆叠柱状图/面积图、矩形树图 | 展示整体中各组成部分的占比关系。 |
| 分布 (Distribution) | 数据集中在哪里?有何规律或异常值? | 直方图、箱形图、散点图、热力图 | 观察数据的频率、范围、密度和分布形态。 |
| 联系 (Relationship) | 两个或多个变量之间有关联吗?关系强度如何? | 散点图、气泡图、热力图、关系图 | 探索变量之间的相关性或连接关系。 |
基于此,我们可以绘制一个更细致的选图决策流程图,帮助你在具体场景中做出选择:
开始:我要展示什么数据关系?
├── 比较
│ ├── 项目间比较(静态排名)
│ │ ├── 项目少(≤5) → 柱状图/条形图
│ │ └── 项目多(>5) → 条形图(水平更易读)
│ └── 时间趋势比较(动态变化)
│ └── 折线图/面积图
├── 构成
│ ├── 静态构成(某一时刻的占比) → 饼图/环形图(部分≤6)
│ └── 动态构成(占比随时间变化) → 堆叠面积图/百分比堆叠柱状图
├── 分布
│ ├── 单变量分布 → 直方图/箱形图
│ └── 多变量分布/关系 → 散点图/气泡图/热力图
└── 联系
├── 两个连续变量关系 → 散点图
├── 三个连续变量关系(第三维用大小表示) → 气泡图
└── 实体间关系网络 → 关系图 (Graph)二、基础图表类型举要
让我们通过几个最基础的图表类型,直观感受上述分类。
1. 柱状图 (Bar Chart) 及其变体 柱状图是比较关系的经典图表,尤其适用于跨类别的数据比较。
- 基础柱状图:比较不同类别的单一数值。
- 堆叠柱状图:在比较类别总计的同时,还能展示其内部的构成。
- 条形图:可视为将柱状图的坐标轴翻转。当类别名称较长或类别数量较多时,使用条形图(水平布局)通常具有更好的可读性。
下面我们用 pyecharts 快速生成一个基础柱状图,体验其数据格式和基本形态。
# 示例:基础柱状图 - 比较不同商品销量
from pyecharts.charts import Bar
from pyecharts import options as opts
# 模拟数据:商品与销量
categories = ['笔记本电脑', '智能手机', '平板电脑', '智能手表', '耳机']
sales_a = [120, 200, 85, 150, 180]
sales_b = [90, 220, 95, 130, 160]
# 创建柱状图对象并添加数据
bar = (
Bar()
.add_xaxis(categories) # X轴:类别
.add_yaxis("商家A", sales_a) # 第一个数据系列
.add_yaxis("商家B", sales_b) # 第二个数据系列
.set_global_opts(
title_opts=opts.TitleOpts(title="不同商品销量对比"),
yaxis_opts=opts.AxisOpts(name="销量(单位:件)"),
xaxis_opts=opts.AxisOpts(name="商品类别"),
)
)
# 生成并打印图表配置摘要(非完整HTML)
print(f"图表类型:{type(bar).__name__}")
print(f"X轴数据:{categories}")
print("系列数量:2")
print(f" 系列1名称:'商家A',数据点:{sales_a[:3]}...")
print(f" 系列2名称:'商家B',数据点:{sales_b[:3]}...")图表类型:Bar
X轴数据:['笔记本电脑', '智能手机', '平板电脑', '智能手表', '耳机']
系列数量:2
系列1名称:'商家A',数据点:[120, 200, 85]...
系列2名称:'商家B',数据点:[90, 220, 95]...2. 折线图 (Line Chart) 与面积图 (Area Chart) 折线图是展示趋势(随时间或其他连续变量变化)的首选,能清晰反映数据的上升、下降或波动。
- 基础折线图:展示数据点之间的趋势。
- 堆叠面积图:在折线图基础上填充颜色,强调趋势的同时,也能表现构成的累积变化。
# 示例:基础折线图 - 展示月度销售额趋势
from pyecharts.charts import Line
import pandas as pd
# 模拟月度数据
months = [f'{m}月' for m in range(1, 13)] # 1月到12月
revenue = [45, 52, 48, 65, 70, 78, 85, 90, 88, 95, 102, 110]
line = (
Line()
.add_xaxis(months)
.add_yaxis("销售额(万元)", revenue, is_smooth=True) # is_smooth 使折线平滑
.set_global_opts(
title_opts=opts.TitleOpts(title="年度销售额趋势"),
yaxis_opts=opts.AxisOpts(name="销售额"),
tooltip_opts=opts.TooltipOpts(trigger="axis"),
)
)
print(f"图表类型:{type(line).__name__}")
print(f"X轴数据长度:{len(line.options['xAxis'][0].get('data', []))}")
print(f"Y轴数据示例:{line.options['series'][0].get('data', [])[:5]}...")图表类型:Line
X轴数据长度:12
Y轴数据示例:[['1月', 45], ['2月', 52], ['3月', 48], ['4月', 65], ['5月', 70]]...3. 饼图 (Pie Chart) 与环形图 (Ring Chart) 饼图专门用于展示构成关系,即各部分占总体的百分比。当类别过多(通常超过6个)时,饼图会显得杂乱,此时可考虑使用环形图或条形图。
- 环形图:是饼图的变体,中间留空,视觉上更轻量,也方便在中心放置总计等文本信息。
# 示例:环形图 - 展示某公司部门预算构成
from pyecharts.charts import Pie
budget_data = [
("研发部", 35),
("市场部", 25),
("销售部", 20),
("行政部", 10),
("其他", 10),
]
pie = (
Pie()
.add(
series_name="预算构成",
data_pair=budget_data,
radius=["40%", "70%"], # 内半径40%,外半径70%,形成环形
label_opts=opts.LabelOpts(formatter="{b}: {d}%"), # {b}名称,{d}百分比
)
.set_global_opts(title_opts=opts.TitleOpts(title="年度部门预算构成"),
legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"))
)
print(f"图表类型:{type(pie).__name__}")
print(f"数据项数量:{len(pie.options['series'][0].get('data', []))}")
for item in pie.options['series'][0].get('data', []):
print(f" 部门:{item.get('name')}, 数值:{item.get('value')}")图表类型:Pie
数据项数量:5
部门:研发部, 数值:35
部门:市场部, 数值:25
部门:销售部, 数值:20
部门:行政部, 数值:10
部门:其他, 数值:10三、本课程的图表学习地图
结合 ECharts 的图表生态和数据分析的常见场景,本课程将核心图表组织成以下九大模块,这也是你后续学习的路线图:
- 项目对比可视化:柱状图、条形图及其高级变体(如瀑布图)。
- 时间趋势可视化:折线图、面积图、K 线图。
- 数据关系可视化:散点图、气泡图、热力图。
- 成分比例可视化:饼图、环形图、矩形树图、旭日图。
- 统计分布可视化:直方图、箱形图。
- 3D 可视化:3D 柱状图、3D 散点图(用于特殊场景展示)。
- 空间数据可视化:地图(全国、省市)、地理坐标系散点/热力/线路图。
- 网络与文本可视化:关系图、主题河流图、词云图。
- 图表组合与高级应用:使用
Grid、Tab、Page等组件进行图表组合,构建数据大屏页面。
这九大模块共同构成本课的选图地图:前八类解决不同数据关系,第九类负责把多个图表组织成完整的页面或数据大屏。
📝 动手练一练
- 场景选择题:你有一份数据,记录了过去一年每个月的“总销售额”、“线上销售额”和“线下销售额”。你现在需要向管理层汇报:
- A. 全年销售额的总体增长趋势。
- B. 每个月线上和线下销售对总销售额的贡献占比。
- C. “线上销售额”与当月“营销费用”这两个变量之间是否存在关联。 请分别为 A、B、C 三个目标选择最合适的 1-2 种图表类型,并简述理由。
点击查看参考答案
- 目标 A:折线图。这是展示数据随时间变化趋势最直接、最有效的图表。将“总销售额”作为 Y 轴数据,月份作为 X 轴,可以清晰看到增长、下降或季节性波动。
- 目标 B:堆叠柱状图或堆叠面积图。这两个图表都能在展示每月总销售额(柱子的总高度或面积的总高度)的同时,通过不同颜色的堆叠部分清晰展示“线上”和“线下”销售额各自的数值及其在当月总额中的构成比例。
- 目标 C:散点图。将“线上销售额”作为 Y 轴,“营销费用”作为 X 轴,每个点代表一个月。通过观察点的分布形态(是否呈带状、斜向上或向下),可以直观判断两个连续变量之间是否存在正相关、负相关或无明显的线性关系。
- 数据格式小实验:在上一节我们学习了
pandas.Series.tolist()用于数据格式转换。请创建一个包含['A', 'B', 'C']的列表和一个包含[10, 20, 30]的列表,用它们创建一个最简单的 pyecharts 柱状图,并打印出图表配置中 X 轴的数据,验证其是否与输入一致。
点击查看参考答案
from pyecharts.charts import Bar
categories = ['A', 'B', 'C']
values = [10, 20, 30]
bar_simple = Bar().add_xaxis(categories).add_yaxis("数值", values)
# 打印验证
print("输入的X轴数据:", categories)
print("图表已创建,X轴类目数量:", len(categories))输入的X轴数据: ['A', 'B', 'C']
图表已创建,X轴类目数量: 3本章小结
本章我们完成了对 pyecharts 的入门探索,从简介、示例、构成元素、数据格式到图表的分类体系。理解图表分类的核心在于从业务问题和数据关系出发,而不是死记硬背 API。有了这张“图表地图”,你就能在后续面对具体可视化任务时,有的放矢地选择学习路径。
📋 行动清单
- 回顾与理解:对照“数据关系四象限”(比较、构成、分布、联系),尝试将自己工作中或看到过的图表归类,思考其选择是否合理。
- 预习准备:下一章我们将进入第一个实战模块——项目对比可视化。你可以提前思考,有哪些数据适合用柱状图或条形图来呈现?例如,不同产品的销量、各部门的 KPI 完成度、各城市的人口数量等。
- 环境确认:确保你的 Python 环境已按课程要求配置好(Python 3.12.10, pyecharts==2.1.0, pandas==3.1.1),为接下来的动手编码做好准备。
—— 小象教研组
