图表选型指南
问题
如何根据分析目的选择合适的图表?常见图表类型的适用场景是什么?
答案
按分析目的选图
核心图表速查表
| 图表类型 | 分析目的 | 数据要求 | 适用场景 |
|---|---|---|---|
| 柱状图 | 对比 | 分类 + 数值 | 各渠道收入对比 |
| 条形图 | 对比(分类多) | 分类 + 数值 | Top 10 产品排名 |
| 折线图 | 趋势 | 时间 + 数值 | DAU 日趋势 |
| 面积图 | 趋势+构成 | 时间 + 分组数值 | 各渠道流量趋势 |
| 饼图 | 占比 | 分类 + 数值 | 收入来源占比(≤6 类) |
| 直方图 | 分布 | 连续数值 | 用户年龄分布 |
| 箱线图 | 分布+异常 | 分组 + 数值 | 各城市订单金额分布 |
| 散点图 | 关系 | 两个数值 | 广告花费 vs 转化 |
| 热力图 | 关系矩阵 | 二维数值矩阵 | 相关系数矩阵 |
| 瀑布图 | 增减构成 | 分步数值 | 利润拆解 |
| 桑基图 | 流转 | 来源→去向 | 用户转化路径 |
| 漏斗图 | 转化 | 各步骤数值 | 注册转化漏斗 |
| 树状图 | 层级占比 | 层级 + 数值 | 品类收入占比 |
常见选图错误
避免这些图表误用
- 饼图类别太多:超过 6 类就改用条形图,人脑无法比较过多扇区
- 3D 图表:几乎所有 3D 效果都是视觉噪声,歪曲数据比例
- 双 Y 轴折线:两条线 Y 轴范围不同,容易误导(可用分面替代)
- 截断 Y 轴:柱状图 Y 轴不从 0 开始,放大差异误导读者
- 不排序的条形图:条形图应按值排序,否则难以比较
Python 快速选图
各场景的图表选择
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
np.random.seed(42)
fig, axes = plt.subplots(2, 3, figsize=(15, 10))
# 1. 对比 → 条形图(水平,排序后)
categories = ['搜索', '社交', '直接', '邮件', '广告']
values = [320, 280, 150, 90, 60]
order = np.argsort(values)
axes[0, 0].barh([categories[i] for i in order], [values[i] for i in order])
axes[0, 0].set_title('对比 → 条形图')
# 2. 趋势 → 折线图
dates = pd.date_range('2024-01', periods=12, freq='M')
axes[0, 1].plot(dates, np.cumsum(np.random.randn(12) * 10 + 5))
axes[0, 1].set_title('趋势 → 折线图')
axes[0, 1].tick_params(axis='x', rotation=45)
# 3. 分布 → 直方图
axes[0, 2].hist(np.random.lognormal(3, 1, 1000), bins=30, edgecolor='white')
axes[0, 2].set_title('分布 → 直方图')
# 4. 占比 → 饼图(≤6类)
labels = ['A', 'B', 'C', 'D']
sizes = [40, 30, 20, 10]
axes[1, 0].pie(sizes, labels=labels, autopct='%1.0f%%', startangle=90)
axes[1, 0].set_title('占比 → 饼图')
# 5. 关系 → 散点图
x = np.random.rand(100) * 100
y = x * 0.8 + np.random.randn(100) * 15
axes[1, 1].scatter(x, y, alpha=0.6)
axes[1, 1].set_title('关系 → 散点图')
# 6. 分布对比 → 箱线图
data = [np.random.normal(loc, 5, 100) for loc in [20, 25, 30]]
axes[1, 2].boxplot(data, labels=['A', 'B', 'C'])
axes[1, 2].set_title('分布对比 → 箱线图')
plt.tight_layout()
plt.show()
图表选择决策树
| 你有什么数据? | 分析目的 | 推荐图表 |
|---|---|---|
| 1 个分类 + 1 个数值 | 对比大小 | 柱状图/条形图 |
| 时间 + 1 个数值 | 看趋势 | 折线图 |
| 时间 + 多组数值 | 看趋势对比 | 多折线 / 分面 |
| 1 个连续数值 | 看分布 | 直方图 / 密度图 |
| 分组 + 1 个数值 | 分布对比 | 箱线图 / 小提琴图 |
| 2 个数值 | 看相关 | 散点图 |
| 3 个数值 | 看相关+维度 | 气泡图 |
| 分类占比(≤6) | 看比例 | 饼图 / 环形图 |
| 多步骤数值 | 看转化 | 漏斗图 |
| 流转方向 | 看流向 | 桑基图 |
常见面试问题
Q1: 什么时候用折线图、什么时候用柱状图?
答案:
- 折线图:X 轴是连续的(通常是时间),强调变化趋势
- 柱状图:X 轴是离散分类,强调数值对比
- 常见错误:用折线图连接无序分类(如不同城市)
Q2: 为什么不推荐用饼图?
答案:
- 人脑对面积/角度的感知远不如长度
- 超过 5-6 类时几乎无法区分差异
- 替代方案:用排序后的条形图更清晰
- 唯一适合饼图的场景:只有 2-3 类且不需要精确比较
Q3: 数据看板上应该放什么图?
答案:
- 顶部:KPI 数字卡片(最关键指标 + 同比/环比)
- 中间:趋势图(核心指标走势) + 对比图(分维度对比)
- 底部:明细表(支持筛选下钻)
- 原则:一屏看全局,点击看细节
Q4: 如何选择颜色?
答案:
- 分类数据:用定性调色板(互不相关的颜色),如 Tableau 10
- 连续数据:用渐变色(从浅到深),如 viridis
- 对比数据:用发散调色板(红-白-蓝),突出正负
- 避免红绿配色(色盲不友好)
- 同一图表颜色不超过 7 种