数据可视化实战:用Matplotlib打造专业级分组与堆叠柱状图
在数据分析领域,柱状图是最基础却最实用的可视化工具之一。但当你需要同时展示多个维度的数据时——比如不同产品线在各季度的销售额对比,或是A/B测试中多个指标的变化情况——简单的单系列柱状图就显得力不从心了。这时,分组柱状图和堆叠柱状图就成了数据分析师的得力助手。
1. 核心概念与适用场景
柱状图的进阶用法主要解决两类核心需求:
- 横向对比:需要同时比较多个类别在不同维度下的表现(如不同产品在多个指标上的差异)
- 构成分析:需要展示总量及其组成部分的关系(如季度销售额中各产品线的贡献比例)
分组柱状图特别适合展示平行对比的场景。比如电商平台想同时对比iPhone和华为手机在Q1-Q4的销量、用户评分和退货率三个指标,用分组柱状图就能一目了然。
python复制import matplotlib.pyplot as plt
import numpy as np
# 示例数据
products = ['iPhone', 'Huawei']
quarters = ['Q1', 'Q2', 'Q3', 'Q4']
sales = {
'iPhone': [120, 150, 180, 210],
'Huawei': [80, 110, 150, 190]
}
x = np.arange(len(quarters)) # 标签位置
width = 0.35 # 柱子宽度
fig, ax = plt.subplots()
for i, (product, values) in enumerate(sales.items()):
offset = width * i
rects = ax.bar(x + offset, values, width, label=product)
ax.set_xticks(x + width/2)
ax.set_xticklabels(quarters)
ax.legend()
堆叠柱状图则擅长展示部分与整体的关系。假设我们要分析某App用户增长中自然流量、广告投放和社交推荐各自的贡献占比,堆叠图就能清晰呈现各渠道的绝对值和相对比例。
提示:选择图表类型时,分组图强调各系列间的比较,堆叠图强调各部分的构成关系。当总量没有意义时(如比较温度和湿度),应该使用分组图而非堆叠图。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 分组柱状图深度解析
2.1 基础实现与常见陷阱
创建分组柱状图的核心是精确控制每组柱子的x轴位置。新手常犯的错误是:
- 柱子宽度设置不当导致重叠或间距过大
- x轴标签未对齐柱子组中心
- 图例未正确关联数据系列
改进后的专业级实现应该包含以下要素:
python复制# 进阶分组柱状图示例
metrics = ['Sales', 'Rating', 'Return Rate']
data = {
'iPhone': [8.2, 4.5, 0.12],
'Huawei': [6.7, 4.8, 0.08]
}
x = np.arange(len(metrics)) # 指标位置
width = 0.35 # 柱子宽度
multiplier = 0 # 初始偏移量
fig, ax = plt.subplots(layou
