Visual Notes · 数据图形札记

十种基础图表的
视觉笔记

把十组练习数据依次放进坐标系:比较、构成、分布、关系与时序,每一种图形都回答一类问题。下文按图的用途排列,附图取自实际代码的输出。

01 — 比较

品类销售额的单序列比较

围绕五类商品,用同一尺度比较月度销售体量;柱高即为绝对金额,避免跨类目量纲换算带来的干扰。生鲜与电子两类明显领跑。

源代码
cats  = ['电子产品', '服装鞋帽', '家居百货', '美妆个护', '食品生鲜']
sales = [550, 420, 280, 390, 610]        # 万元

fig, ax = plt.subplots(figsize=(7.2, 4.2))
ax.bar(cats, sales, width=0.52, color='#5b6e5a',
       edgecolor='#2b2b2b', linewidth=0.6)
plt.show()
各品类月销售额
图 01 · 单序列柱形图
02 — 比较

双季度支出的横向对照

两组季度数据并置于同一行,水平方向的长度差可直接读出城市间的消费差距,适合快速定位增长主力与滞后项。

源代码
q1 = [12000, 11500, 9800, 10500]
q2 = [13500, 12800, 10900, 11900]

plt.barh(y + h/2, q1, h, color='#d9cfc0', label='第一季度')
plt.barh(y - h/2, q2, h, color='#a63d2f', label='第二季度')
plt.yticks(y, ['北京', '上海', '广州', '深圳'])
plt.show()
四城人均消费支出
图 02 · 分组条形图
03 — 分布

工艺质量的四分位审视

以中位数与四分位距刻画工艺稳定性,箱须之外的孤立点提示批次中可能存在异常样本;工艺乙的离散程度最小。

源代码
a = np.random.normal(100, 5, 50)
b = np.random.normal(105, 3, 50)
c = np.append(np.random.normal(95, 8, 48), [130, 60])

plt.boxplot([a, b, c], tick_labels=['工艺甲', '工艺乙', '工艺丙'],
            patch_artist=True, showmeans=True)
plt.show()
不同工艺质量分布
图 03 · 箱形图
04 — 时序

收入与利润的九年间走势

两条曲线共享横轴:实线为营收,虚线为利润。斜率差异反映出利润率随规模扩张的微妙变化,间距逐年收窄。

源代码
years   = range(2019, 2026)
revenue = [2.5, 3.1, 4.0, 5.2, 6.5, 7.8, 8.5]
profit  = [0.5, 0.7, 0.9, 1.3, 1.8, 2.2, 2.5]

plt.plot(years, revenue, marker='o', color='#2b2b2b', label='营收')
plt.plot(years, profit, marker='s', color='#a63d2f',
         linestyle='--', label='利润')
plt.legend(loc='upper left'); plt.show()
营收与利润走势
图 04 · 双序列折线图
05 — 分布

成绩分布的频次切片

把连续成绩切为十个区间统计人数,峰值所在区间即班级水平的集中带;两端尾部较薄,说明极端分数稀少。

源代码
scores = np.random.normal(75, 15, 50)
scores = np.clip(scores, 40, 100)

plt.hist(scores, bins=10, range=(40, 100),
         color='#d9cfc0', edgecolor='#2b2b2b', linewidth=0.6)
plt.show()
成绩频率分布
图 05 · 直方图
06 — 构成

团队构成的占比切分

四类岗位按人数切分圆周,扇区面积与百分比同义;后端接近四成,是团队的人力重心,设计与测试相对精干。

源代码
roles  = ['后端开发', '前端开发', 'UI/UX 设计', '软件测试']
counts = [15, 12, 5, 8]

plt.pie(counts, labels=roles, autopct='%.1f%%', startangle=90,
        counterclock=False, colors=['#2b2b2b', '#a63d2f',
        '#5b6e5a', '#c09a3e'],
        wedgeprops={'edgecolor': 'white', 'linewidth': 2})
plt.show()
团队专业构成
图 06 · 饼图
07 — 关系

人口、经济与收入的三重映射

横轴人口、纵轴经济总量、半径与色相同时编码收入水平;三个变量压缩在一张平面图上,图例改为连续色带。

源代码
sc = plt.scatter(pop, gdp, s=[v*130 for v in inc],
                 c=inc, cmap='YlOrBr', alpha=0.85,
                 edgecolors='#2b2b2b', linewidths=0.7)
plt.colorbar(sc, label='人均收入 / 万元')
plt.show()
人口GDP与收入关系
图 07 · 气泡图
08 — 时序

用户来源的层叠累积

三类来源逐月叠加,叠层总高度即活跃总量,单层厚度对应各自贡献;自然流量始终是底座,内容营销的增速最快。

源代码
plt.stackplot(months, organic, ads, content,
              labels=['自然流量', '广告投放', '内容营销'],
              colors=['#2b2b2b', '#a63d2f', '#5b6e5a'],
              alpha=0.9, edgecolor='white', linewidth=0.6)
plt.legend(loc='upper left'); plt.show()
活跃用户来源构成
图 08 · 堆积面积图
09 — 区间

时长与强度的区间估计

折线连接各时点的均值,误差棒给出一个标准差范围:强度上升与不确定性放大同步发生,长时处理的可靠性反而更低。

源代码
plt.errorbar(time, mean_i, yerr=std_i, fmt='-o',
             color='#2b2b2b', markerfacecolor='#a63d2f',
             ecolor='#8b8579', elinewidth=1.1, capsize=3)
plt.xticks(time); plt.show()
处理时长与反应强度
图 09 · 误差棒图
10 — 多维

五维指标的轮廓对照

五条指标轴围成闭合轮廓,两个多边形的交叠处高低差直接指示取舍方向:甲偏性能,乙偏服务与价格。

源代码
labels = ['性能', '设计', '续航', '价格', '服务']
a = [9.0, 7.5, 8.0, 6.5, 7.0]
b = [7.0, 8.5, 7.5, 8.0, 9.0]

ax = plt.subplot(111, polar=True)
ax.set_theta_offset(np.pi/2); ax.set_theta_direction(-1)
ax.plot(angles, a_a, color='#a63d2f', lw=1.8, label='机型甲')
ax.fill(angles, a_a, color='#a63d2f', alpha=0.12)
plt.show()
两款机型指标对照
图 10 · 雷达图