Python 使用matplotlib子地块和seaborn的y轴范围错误

Python 使用matplotlib子地块和seaborn的y轴范围错误,python,matplotlib,seaborn,Python,Matplotlib,Seaborn,我第一次使用seaborn,尝试使用matplotlib子地块在不同的绘图上绘制熊猫数据帧的不同列。下面的简单代码生成预期的图形,但最后一个绘图没有适当的y范围(它似乎链接到数据框中的完整值范围)。 有人知道为什么会发生这种情况以及如何预防吗?谢谢 import matplotlib.pyplot as plt import numpy as np import pandas as pds import seaborn as sns X = np.arange(0,10) df = pds.D

我第一次使用seaborn,尝试使用matplotlib子地块在不同的绘图上绘制熊猫数据帧的不同列。下面的简单代码生成预期的图形,但最后一个绘图没有适当的y范围(它似乎链接到数据框中的完整值范围)。 有人知道为什么会发生这种情况以及如何预防吗?谢谢

import matplotlib.pyplot as plt
import numpy as np
import pandas as pds
import seaborn as sns

X = np.arange(0,10)
df = pds.DataFrame({'X': X, 'Y1': 4*X, 'Y2': X/2., 'Y3': X+3, 'Y4': X-7})

fig, axes = plt.subplots(ncols=2, nrows=2)
ax1, ax2, ax3, ax4 = axes.ravel()
sns.set(style="ticks")
sns.despine(fig=fig)

sns.regplot(x='X', y='Y1', data=df, fit_reg=False, ax=ax1)
sns.regplot(x='X', y='Y2', data=df, fit_reg=False, ax=ax2)
sns.regplot(x='X', y='Y3', data=df, fit_reg=False, ax=ax3)
sns.regplot(x='X', y='Y4', data=df, fit_reg=False, ax=ax4)

plt.show()

更新:我用以下代码修改了上述代码:

fig, axes = plt.subplots(ncols=2, nrows=3)
ax1, ax2, ax3, ax4, ax5, ax6 = axes.ravel()
如果我在任何轴上绘制数据,但最后一个轴除外,我将获得我要查找的数据: 我当然不想要空的相框。所有绘图都以相似的视觉效果显示数据。
当数据绘制在最后一个轴上时,它得到的y范围太宽,如第一个示例中所示。只有最后一个轴似乎有这个问题。有线索吗

如果希望所有轴上的比例相同,可以使用以下命令创建子图:

fig, axes = plt.subplots(ncols=2, nrows=2, sharey=True, sharex=True)
这将使所有绘图共享相关轴:

如果要手动更改特定
ax
的限制,可以在打印命令末尾添加此行:

ax4.set_ylim(top=5) 

# or for both limits like this: 
# ax4.set_ylim([-2, 5])
这将产生如下结果:


感谢您提供了可复制的示例。如果您指定预期的y范围将有所帮助。是的,对不起,我应该更具体一些。我编辑了我的文章,用一个这样的作品来反映这一点,创建了6个轴,只使用了其中的4个。很难看,但你会看到我在找什么。谢谢。谢谢你的回复。第二个图形是我正在寻找的,但我希望我不必“手动”指定范围。奇怪的是,如果我创建了第三行(或第三列)轴,但只在前4或5个轴上绘制,我会得到我想要的图形(但有两个空轴)。仅将最后一个轴作为更大范围的y值。我编辑了我的帖子来反映这种行为。在这种情况下,“手动”意味着你可以让任何轴取你喜欢的任何数值范围。你不必每次都输入数字。在代码中包含这样的内容就足够了,以确保范围良好:
ax4.set_ylim([df.Y4.min()-1,df.Y4.max()+1])