Matplotlib — 如何将堆叠的条形图放入子图中
Matplotlib — How to put stacked barplots into subplots
我正在尝试在 matplotlib 中的同一个图中绘制两个堆叠条形图。下面的代码不是绝对最小的,因为即使我将同一个情节调用到两个不同的子情节中,我也会得到同样的错误,但是因为没有理由两次绘制同一个情节我包括 groups
专栏,使情况更平易近人。
df = pd.DataFrame({
'groups': ['A', 'A', 'B', 'A', 'A', 'B', 'B', '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()
当我在 jupyter notebooks 中 运行 this 时,我得到两个空的子图(一个在另一个下面,所以不在同一个图中),然后两个图中的第二个出现在下面。
无论我将 stacked=
设置为 True
还是 False
,都会发生这种情况,所以我猜测它与我无法做到的 .plot.bar()
有关'在文档中找不到。当我用 plt.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)
输出:
注意 您可以使用 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)
我正在尝试在 matplotlib 中的同一个图中绘制两个堆叠条形图。下面的代码不是绝对最小的,因为即使我将同一个情节调用到两个不同的子情节中,我也会得到同样的错误,但是因为没有理由两次绘制同一个情节我包括 groups
专栏,使情况更平易近人。
df = pd.DataFrame({
'groups': ['A', 'A', 'B', 'A', 'A', 'B', 'B', '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()
当我在 jupyter notebooks 中 运行 this 时,我得到两个空的子图(一个在另一个下面,所以不在同一个图中),然后两个图中的第二个出现在下面。
无论我将 stacked=
设置为 True
还是 False
,都会发生这种情况,所以我猜测它与我无法做到的 .plot.bar()
有关'在文档中找不到。当我用 plt.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)
输出:
注意 您可以使用 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)