python - Matplotlib — 如何将堆叠的条形图放入子图中
问题描述
我正在尝试在 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 中运行它时,我得到两个空的子图(一个在另一个之下,所以不在同一个图中),然后两个图中的第二个出现在下面。
无论我设置stacked=
为True
or 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)
推荐阅读
- tensorflow - 为 Torch 和 Tensorflow 模型分配两个独立的 GPU
- python - 如何添加创建多个相同项目并将它们添加到数组中?
- google-apps-script - 使用应用脚本将下拉菜单更改为“锁定”时保护行
- python - 如何使串口和matplotlib在同一个Python scrypt中工作
- python - 可以为分布式 Tensorflow 虚拟化 NVIDIA GeForce GTX 1070 显卡吗?
- ios - 导航控制器在多个故事板中不起作用
- java - Spring Cloud Stream / Kafka 异常
- laravel - 如何在共享主机上运行队列工作者
- mysql - 什么时候在 sql 中执行聚合函数(如 sum()、max().. 等)
- angular5 - 在组件上手动调用 changeDetect() 时未调用 ngOnInit 或 ngOnChanges