Python 调整绘图(matplotlib,pandas)中的y-lim比例,以实现两个绘图的相同比例
我有一个数据框,看起来像这样:Python 调整绘图(matplotlib,pandas)中的y-lim比例,以实现两个绘图的相同比例,python,pandas,matplotlib,Python,Pandas,Matplotlib,我有一个数据框,看起来像这样: 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
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轴
如果有人建议两个地块的比例相同,我将不胜感激 使用plt.ylim()
将仅调整最后绘制图形的轴。要更改特定绘图的y限制,需要使用ax.set_ylim()
所以在你的情况下是这样的
axes[0].set_ylim(0,25000)
axes[1].set_ylim(0,25000)
为循环中的每个轴设置
ylim
min和max值:
for ax in axes: ax.set_ylim([0,25000])
当然,您只需在相应的轴上调用
.setylim()
。这样做的缺点是,您需要知道通过这样做设置的限制。
以下解决方案没有此要求:
沙利
在代码中,您明确地设置了sharey=False
。如果将其更改为True
,则会得到一个共享的yaxis。然后,您可以使用plt.ylim([025000])
来限制轴,但您不必这样做,因为它们是共享的,并且会自动调整
最简单的例子:
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()
在这里,标签保持可见。如果您不想这样做,可以通过ax2关闭它们。设置标签([])谢谢Serenity和DavidG。。两者都为我所寻找的工作和服务。:)@ImportanceOfBeingErnest.的可能重复项。。非常感谢你。。我刚刚意识到sharey=True可以解决我的轴问题:)它仍然可以解决你的问题,你只需要使用它;-)是的!非常感谢。