Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 调整绘图(matplotlib,pandas)中的y-lim比例,以实现两个绘图的相同比例_Python_Pandas_Matplotlib - Fatal编程技术网

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可以解决我的轴问题:)它仍然可以解决你的问题,你只需要使用它;-)是的!非常感谢。