查看全课大纲(第 14 / 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) 等特殊用途图表。

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 的图表生态和数据分析的常见场景,本课程将核心图表组织成以下九大模块,这也是你后续学习的路线图:

  1. 项目对比可视化:柱状图、条形图及其高级变体(如瀑布图)。
  2. 时间趋势可视化:折线图、面积图、K 线图。
  3. 数据关系可视化:散点图、气泡图、热力图。
  4. 成分比例可视化:饼图、环形图、矩形树图、旭日图。
  5. 统计分布可视化:直方图、箱形图。
  6. 3D 可视化:3D 柱状图、3D 散点图(用于特殊场景展示)。
  7. 空间数据可视化:地图(全国、省市)、地理坐标系散点/热力/线路图。
  8. 网络与文本可视化:关系图、主题河流图、词云图。
  9. 图表组合与高级应用:使用 Grid、Tab、Page 等组件进行图表组合,构建数据大屏页面。

这九大模块共同构成本课的选图地图:前八类解决不同数据关系,第九类负责把多个图表组织成完整的页面或数据大屏。

📝 动手练一练

  1. 场景选择题:你有一份数据,记录了过去一年每个月的“总销售额”、“线上销售额”和“线下销售额”。你现在需要向管理层汇报:
    • A. 全年销售额的总体增长趋势。
    • B. 每个月线上和线下销售对总销售额的贡献占比。
    • C. “线上销售额”与当月“营销费用”这两个变量之间是否存在关联。 请分别为 A、B、C 三个目标选择最合适的 1-2 种图表类型,并简述理由。
点击查看参考答案
  • 目标 A:折线图。这是展示数据随时间变化趋势最直接、最有效的图表。将“总销售额”作为 Y 轴数据,月份作为 X 轴,可以清晰看到增长、下降或季节性波动。
  • 目标 B:堆叠柱状图或堆叠面积图。这两个图表都能在展示每月总销售额(柱子的总高度或面积的总高度)的同时,通过不同颜色的堆叠部分清晰展示“线上”和“线下”销售额各自的数值及其在当月总额中的构成比例。
  • 目标 C:散点图。将“线上销售额”作为 Y 轴,“营销费用”作为 X 轴,每个点代表一个月。通过观察点的分布形态(是否呈带状、斜向上或向下),可以直观判断两个连续变量之间是否存在正相关、负相关或无明显的线性关系。
  1. 数据格式小实验:在上一节我们学习了 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),为接下来的动手编码做好准备。

—— 小象教研组