Matplotlib — 如何将堆积的条形图放入子图中

问题描述

我试图在 matplotlib 的同一个图中绘制两个堆叠的条形图。下面的代码并不是绝对最小的,因为即使我将同一个调用到两个不同的子图中,我也会遇到相同的错误,但是由于没有理由将同一个图绘制两次,因此我将 {{1} } 列使情况更平易近人。

groups

当我在 jupyter notebooks 中运行这个时,我得到两个空的子图(一个在另一个下面,所以不在同一个图中),然后两个图中的第二个出现在下面。

enter image description here

enter image description here

enter image description here

无论我将 df = pd.DataFrame({ 'groups': ['A','A','B','B'],'type_one': [223.3,17.2,13.5,2.4,9.2,43.3,15.2,23.5,21.4,98.2],'type_two': [419.6,42.0,24.6,33.6,21.8,11.5,12.4,91.2,41.3,16.2] }) plt.figure(figsize=(12,4)) plt.subplot(121) df[df.groups=='A'].plot.bar(stacked=True) plt.subplot(122) df[df.groups=='B'].plot.bar(stacked=True) plt.show() 设置为 stacked= 还是 True,都会发生这种情况,所以我猜这与我找不到的 False 有关在文档中。当我用 .plot.bar() 尝试同样的事情时,情节正常产生。

解决方法

捕获由subplot创建的轴并传递给bar

ax = plt.subplot(121)
df[df.groups=='A'].plot.bar(stacked=True,ax=ax)

ax = plt.subplot(122)
df[df.groups=='B'].plot.bar(stacked=True,ax=ax)

输出:

enter image description here

注意您可以使用 groupby 简化代码:

fig,axes = plt.subplots(1,2,figsize=(12,4))

for (k,d),ax in zip(df.groupby('groups'),axes.flat):
    d.plot.bar(stacked=True,ax=ax)