如何在Python中使用matplotlib显示堆叠条形图?

如何在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.barplt.xticksplt.legend等。最终,我们成功地绘制出了一幅三年间三家店铺销售额的堆叠条形图,展示了不同店铺随着时间的变化之间的销售额趋势和差距。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程