我的数据框看起来像这样:
AgeGroups Factor Cancer Frequency
0 00-05 B Yes 223
1 00-05 A No 108
2 00-05 A Yes 0
3 00-05 B No 6575
4 11-15 B Yes 143
5 11-15 A No 5
6 11-15 A Yes 1
7 11-15 B No 3669
8 16-20 B Yes 395
9 16-20 A No 28
10 16-20 A Yes 1
11 16-20 B No 6174
12 21-25 B Yes 624
13 21-25 A No 80
14 21-25 A Yes 2
15 21-25 B No 8173
16 26-30 B Yes 968
17 26-30 A No 110
18 26-30 A Yes 2
19 26-30 B No 9143
20 31-35 B Yes 1225
21 31-35 A No 171
22 31-35 A Yes 5
23 31-35 B No 9046
24 36-40 B Yes 1475
25 36-40 A No 338
26 36-40 A Yes 21
27 36-40 B No 8883
28 41-45 B Yes 2533
29 41-45 A No 782
.. ... ... ... ...
54 71-75 A Yes 2441
55 71-75 B No 15992
56 76-80 B Yes 4614
57 76-80 A No 5634
58 76-80 A Yes 1525
59 76-80 B No 10531
60 81-85 B Yes 1869
61 81-85 A No 2893
62 81-85 A Yes 702
63 81-85 B No 5692
64 86-90 B Yes 699
65 86-90 A No 1398
66 86-90 A Yes 239
67 86-90 B No 3081
68 91-95 B Yes 157
69 91-95 A No 350
70 91-95 A Yes 47
71 91-95 B No 1107
72 96-100 B Yes 31
73 96-100 A No 35
74 96-100 A Yes 2
75 96-100 B No 230
76 >100 B Yes 5
77 >100 A No 1
78 >100 A Yes 1
79 >100 B No 30
80 06-10 B Yes 112
81 06-10 A No 6
82 06-10 A Yes 0
83 06-10 B No 2191
代码:
by_factor = counts.groupby(level='Factor')
k = by_factor.ngroups
fig, axes = plt.subplots(1, k, sharex=True, sharey=False, figsize=(15, 8))
for i, (gname, grp) in enumerate(by_factor):
grp.xs(gname, level='Factor').plot.bar(
stacked=True, rot=45, ax=axes[i], title=gname)
fig.tight_layout()
我有一张漂亮的图表,看起来像这样: 这实际上是我想要的,直到我意识到我想重新调整我的y轴,使得我可以在两个图表中具有相同的y轴比例。如果您查看右侧图表'B',则y轴的比例为25000,图表'A'的比例为10000.任何人都可以建议在两个图表上具有相同比例的最佳方法是什么? 我试过了:
plt.ylim([0,25000])
在图表'A'中没有做任何改动或没改变任何东西,因为这基本上只改变了图表'B'的y轴。
我非常感谢任何有关两个地块达到相同规模的建议。
答案 0 :(得分:4)
为循环中的每个轴设置ylim
最小值和最大值:
for ax in axes: ax.set_ylim([0,25000])
答案 1 :(得分:2)
使用plt.ylim()
只会调整绘制的最后一个数字的轴。要更改特定绘图的y限制,您需要使用ax.set_ylim()
。
所以在你的情况下,它将是
axes[0].set_ylim(0,25000)
axes[1].set_ylim(0,25000)
答案 2 :(得分:2)
您当然可以在相应的轴上调用.set_ylim()
。这样做的缺点是你需要知道设置的限制。
以下解决方案没有此要求:
在您的代码中,您明确设置了sharey=False
。如果您将其更改为True
,则会获得共享的yaxis。然后,您可以使用plt.ylim([0,25000])
来限制轴,但您不必这样做,因为它们是共享的并且会自动调整。
最小例子:
import matplotlib.pyplot as plt
fig, (ax, ax2) = plt.subplots(ncols=2, sharex=True, sharey=True)
ax.plot([1,3,2])
ax2.plot([2,3,1])
plt.show()
可以看出共享轴的勾选标签是隐藏的,这在许多情况下可能是理想的。
有两个轴,您可以使用
使它们共享相同的比例import matplotlib.pyplot as plt
fig, (ax, ax2) = plt.subplots(ncols=2, sharex=True, sharey=False)
ax.get_shared_x_axes().join(ax, ax2)
ax.plot([1,3,2])
ax2.plot([2,3,1])
plt.show()
这里的ticklabels保持可见。如果您不想要,可以通过ax2.set_yticklabels([])
将其关闭。