首页 > 解决方案 > 如何在条形图上仅堆叠部分 pandas DataFrame 系列

问题描述

我有以下数据框:

from matplotlib import pyplot as plt
import pandas as pd

plotdata = pd.DataFrame({
    "pies_2018":[40, 12, 10, 26, 36],
    "pies_2019":[19, 8, 30, 21, 38],
    "pies_2020":[10, 10, 42, 17, 37],
    "pies_produced": [100, 80, 75, 10, 60]
    }, 
    index=["Dad", "Mam", "Bro", "Sis", "Me"]
)
plotdata.plot(kind="bar")

plt.title("Mince Pie Consumption Study Results")
plt.xlabel("Family Member")
plt.ylabel("Pies Consumed")

现在我正在寻找一种绘制堆叠条形图的方法,但我只想堆叠一些系列(pies_20 *),并且pies_produced应该显示在堆叠系列旁边,以显示消耗的馅饼与生产的馅饼相比如何。所以最后我应该为每个家庭成员买两个酒吧。我不想总结馅饼_ *,因为我还是想区分消费时间。请参阅Bro的绘制示例。

是否可以在堆积条旁边显示具有每年价值的图例?

在此处输入图像描述

谢谢你。

标签: pythonpandasmatplotlib

解决方案


尝试使用选项stacked和绘制两次position

fig, ax = plt.subplots(figsize=(10,6))

# plot first 3 columns, stacked and shifted left
plotdata.iloc[:,:-1].plot.bar(stacked=True, position=1, width=.4, ax=ax)

# plot last column, shifted right
plotdata.iloc[:,-1:].plot.bar(position=0,color='C4', width=.4, ax=ax)

ax.set_xlim(-0.5, len(plotdata)-0.5)

输出:

在此处输入图像描述


推荐阅读