如何在Python中使用matplotlib显示堆叠条形图?
在数据可视化中,条形图是一种非常常见的图表类型,常用于比较各类别之间的数据差异。而在需要将多个类别的数据进行比较时,堆叠条形图就成为了一个很好的选择。在Python中,matplotlib是一个强大的可视化库,提供了许多函数和方法用于绘制各种类型的图表,包括堆叠条形图。
准备数据
为了演示如何在Python中使用matplotlib显示堆叠条形图,我们需要准备一个合适的数据集。这里我们使用一个虚构的数据集,它包含2019年至2021年三年间不同店铺在每月的销售额:
import pandas as pd
data = pd.DataFrame({
'店铺1': [100, 150, 200, 300, 250, 200, 210, 200, 150, 170, 200, 300],
'店铺2': [120, 160, 180, 280, 260, 230, 220, 190, 160, 180, 220, 320],
'店铺3': [80, 120, 150, 260, 220, 180, 160, 140, 120, 140, 160, 250]
}, index=['2019-01', '2019-02', '2019-03', '2019-04', '2019-05', '2019-06', '2019-07', '2019-08', '2019-09', '2019-10', '2019-11', '2019-12'])
data = data.merge(
pd.DataFrame({
'店铺1': [110, 140, 180, 290, 260, 205, 200, 190, 160, 180, 220, 310],
'店铺2': [130, 165, 190, 290, 270, 230, 222, 200, 160, 180, 220, 310],
'店铺3': [85, 125, 160, 270, 228, 185, 155, 139, 118, 145, 159, 247]
}, index=['2020-01', '2020-02', '2020-03', '2020-04', '2020-05', '2020-06', '2020-07', '2020-08', '2020-09', '2020-10', '2020-11', '2020-12']),
left_index=True, right_index=True
)
data = data.merge(
pd.DataFrame({
'店铺1': [110, 145, 190, 300, 265, 210, 205, 186, 155, 175, 224, 305],
'店铺2': [130, 168, 192, 295, 272, 233, 225, 205, 160, 182, 220, 305],
'店铺3': [88, 128, 155, 275, 232, 180, 150, 136, 120, 142, 160, 240]
}, index=['2021-01', '2021-02', '2021-03', '2021-04', '2021-05', '2021-06', '2021-07', '2021-08', '2021-09', '2021-10', '2021-11', '2021-12']),
left_index=True, right_index=True
)
data
运行上述代码后,可以得到一个包含三年间销售数据的DataFrame对象,输出如下:
店铺1 店铺2 店铺3
2019-01 100 120 80
2019-02 150 160 120
2019-03 200 180 150
2019-04 300 280 260
2019-05 250 2019-06 200
2019-07 210
2019-08 200
2019-09 150
2019-10 170
2019-11 200
2019-12 300
2020-01 110 130 85
2020-02 140 165 125
2020-03 180 190 160
2020-04 290 290 270
2020-05 260 270 228
2020-06 205 230 185
2020-07 200 222 155
2020-08 190 200 139
2020-09 160 160 118
2020-10 180 180 145
2020-11 220 220 159
2020-12 310 310 247
2021-01 110 130 88
2021-02 145 168 128
2021-03 190 192 155
2021-04 300 295 275
2021-05 265 272 232
2021-06 210 233 180
2021-07 205 225 150
2021-08 186 205 136
2021-09 155 160 120
2021-10 175 182 142
2021-11 224 220 160
2021-12 305 305 240
可以看到,该数据集记录了三家店铺在36个月份内的销售数据,其中列为店铺名称,行为日期。接下来,我们将使用matplotlib库绘制这个数据集的堆叠条形图。
绘制堆叠条形图
首先,我们需要安装matplotlib库:
!pip install matplotlib
接下来,我们导入需要的库和模块:
import matplotlib.pyplot as plt
import numpy as np
由于堆叠条形图需要将每个类别的数据堆叠在一起,我们需要将每个店铺的销售数据拆分成一个一个月份的数据,然后按顺序堆叠在一起。代码如下:
x = np.arange(len(data.index))
y1 = data['店铺1'].values
y2 = data['店铺2'].values
y3 = data['店铺3'].values
width = 0.6
plt.bar(x, y1, width=width, color='tab:blue')
plt.bar(x, y2, bottom=y1, width=width, color='tab:orange')
plt.bar(x, y3, bottom=y1+y2, width=width, color='tab:green')
plt.xticks(x, data.index, rotation=45)
plt.legend(['店铺1', '店铺2', '店铺3'], loc='best')
plt.show()
代码中的plt.bar
函数用于绘制条形图,x
是条形图中每个类别的位置,而y
是对应类别的数值。在堆叠条形图中,除了第一个类别的数据,其它类别的数据都要在图中上方堆叠。所以当我们绘制第二个类别的条形图时,需要加上参数bottom=y1
表示将第二个类别的数据堆叠在第一个类别的数据之上;同理,绘制第三个类别的条形图时,需要加上参数bottom=y1+y2
表示将第三个类别的数据堆叠在前两个类别的数据之上。最后,还需要设置x轴标签和图例。
结论
在本文中,我们介绍了如何在Python中使用matplotlib显示堆叠条形图。首先,我们准备了一个虚构的销售数据集,并展示了如何使用Pandas库将多个DataFrame对象合并成一个对象。接着,我们使用matplotlib库绘制了该数据集的堆叠条形图,其中涉及到的关键函数包括plt.bar
、plt.xticks
和plt.legend
等。最终,我们成功地绘制出了一幅三年间三家店铺销售额的堆叠条形图,展示了不同店铺随着时间的变化之间的销售额趋势和差距。