朋友圈热议:柱状图不够用了,现在都用堆积柱状图

文摘   2024-11-05 09:01   爱尔兰  
在数据可视化中,堆积柱状图(Stacked Bar Chart)是一种常用的图表类型,它不仅能展示每个类别的总量,还能细分显示各组成部分的数量。今天的更新将详细介绍堆积柱状图的概念、优势及其与传统柱状图的差异。我们会通过Python代码展示如何绘制堆积柱状图,并详细讲解每步代码。

什么是堆积柱状图?

堆积柱状图是一种柱状图,其特点在于每根柱子被划分成多个部分,每个部分代表不同的数据类别。不同颜色的部分堆叠在一起,展示了每个类别在整体中所占的比例。堆积柱状图适用于展示多个类别的细分数据,同时也能展示每个类别的总和。
优势
  • 信息丰富:相比于传统柱状图,堆积柱状图可以同时展示多个子类别的详细信息。
  • 比较方便:能直观比较每个主类别的整体数值和子类别的分布情况。
  • 紧凑布局:在一个图表中展示更多信息而不会占用太多空间。
堆积柱状图与传统柱状图的差异
  • 展示维度:传统柱状图通常展示单一变量,而堆积柱状图可以展示多个变量。
  • 比较方式:在堆积柱状图中可以直接比较各部分的相对比例,而传统柱状图需要多个图来展示不同类别。
  • 解读难度:当子类别数量较多时,堆积柱状图的解读难度可能会增加。

绘图难点

  • 数据格式:需要确保数据在堆叠时能正确地匹配。
  • 颜色选择:由于堆积柱状图包含多个子类别,需选择区分度高的配色方案。
  • 标签设置:如何清晰地标识每个子类别的数值。

使用Python绘制堆积柱状图

下面是使用Python的MatplotlibPandas库绘制堆积柱状图的详细步骤。我们将以一个虚拟的季度销售数据集为例,展示不同产品在每个季度的销售额。

步骤1:导入所需库

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

步骤2:创建数据集

我们创建一个季度销售数据集,包含三个产品类别的销售数据。
# 创建虚拟数据
data = {
'Quarter': ['Q1', 'Q2', 'Q3', 'Q4'],
'Product_A': [150, 200, 300, 250],
'Product_B': [180, 210, 320, 220],
'Product_C': [100, 130, 250, 280]
}
df = pd.DataFrame(data)

步骤3:设置颜色和图形样式

选择区分度高的颜色,以便在堆积图中清晰地展示各类别。
# 设置图表颜色
colors = ['#FFA07A', '#20B2AA', '#778899'] # 产品A, B, C的颜色

步骤4:绘制堆积柱状图

我们使用plt.bar()函数依次绘制每个产品类别,并将其堆叠在上一层的基础上。
# 设置图表大小
plt.figure(figsize=(10, 6))

# 计算各类别的底部位置
bar_width = 0.6 # 设置柱宽
bottoms = np.zeros(len(df)) # 初始化底部位置为0

# 循环绘制每个产品的柱状图,并设置为堆叠
for idx, product in enumerate(['Product_A', 'Product_B', 'Product_C']):
plt.bar(df['Quarter'], df[product], bottom=bottoms, color=colors[idx], label=product, width=bar_width)
bottoms += df[product] # 更新底部位置

# 添加图例和标签
plt.xlabel('Quarter')
plt.ylabel('Sales')
plt.title('Quarterly Sales by Product Category')
plt.legend(title='Product Category')
plt.show()

步骤5:添加数据标签

在堆积柱状图上方添加数据标签,让读者更直观地看到每个子类别的数值。
# 在堆积柱状图上添加数据标签
bottoms = np.zeros(len(df)) # 重置底部位置

for idx, product in enumerate(['Product_A', 'Product_B', 'Product_C']):
for i, value in enumerate(df[product]):
plt.text(x=i, y=bottoms[i] + value / 2, s=f'{value}', ha='center', color='white', weight='bold')
bottoms += df[product]

步骤6:最终代码

以下是完整的代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 创建虚拟数据
data = {
'Quarter': ['Q1', 'Q2', 'Q3', 'Q4'],
'Product_A': [150, 200, 300, 250],
'Product_B': [180, 210, 320, 220],
'Product_C': [100, 130, 250, 280]
}
df = pd.DataFrame(data)

# 设置颜色
colors = ['#FFA07A', '#20B2AA', '#778899']

# 绘制堆积柱状图
plt.figure(figsize=(10, 6))
bar_width = 0.6
bottoms = np.zeros(len(df))

for idx, product in enumerate(['Product_A', 'Product_B', 'Product_C']):
plt.bar(df['Quarter'], df[product], bottom=bottoms, color=colors[idx], label=product, width=bar_width)
bottoms += df[product]

# 添加数据标签
bottoms = np.zeros(len(df))
for idx, product in enumerate(['Product_A', 'Product_B', 'Product_C']):
for i, value in enumerate(df[product]):
plt.text(x=i, y=bottoms[i] + value / 2, s=f'{value}', ha='center', color='white', weight='bold')
bottoms += df[product]

# 添加图例和标题
plt.xlabel('Quarter')
plt.ylabel('Sales')
plt.title('Quarterly Sales by Product Category')
plt.legend(title='Product Category')
plt.show()

总结

通过本教程,我们了解了如何使用Python绘制堆积柱状图,讨论了其优势及绘图难点。堆积柱状图是展示多个子类别数据的一种有效方式,适用于各类数据分析场景。希望本教程能帮助你在项目中轻松地使用堆积柱状图展示数据。
感谢关注,你的支持是我不懈的动力!

科研代码
专注R和Python的数据分析。
 最新文章