2016-04-21 101 views
3

我第一次玩seaborn,试图在不同的情节使用matplotlib subplots绘制不同列的熊猫数据框。下面的简单代码产生了期望的数字,但最后一幅图没有合适的y范围(它似乎与数据框中所有值的范围有关)。 有没有人有一个想法,为什么发生这种情况,以及如何防止它?谢谢。错误的y轴范围使用matplotlib subplots和seaborn

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() 

enter image description here

更新:我修改了上面的代码:

fig, axes = plt.subplots(ncols=2, nrows=3) 
ax1, ax2, ax3, ax4, ax5, ax6 = axes.ravel() 

如果我绘制任意轴的数据,但是最后一个我得到什么我在寻找: enter image description here 当然,我不想空框架。所有地块都以类似的视觉方面呈现数据。 当数据绘制在最后一个轴上时,它获得的y范围太宽,与第一个示例中一样。只有最后一个轴似乎有这个问题。任何线索?

+0

谢谢你的可重复的例子。如果您指定了预期的y范围,这将有所帮助。 –

+0

是的,抱歉,我应该更具体。我编辑我的帖子,以反映这一点的工作,创建6轴,只使用其中4个。这很丑,但你会看到我在找什么。谢谢。 – Volty

回答

1

如果你想在尺度上的所有轴,你可以用这个命令创建次要情节一样:

fig, axes = plt.subplots(ncols=2, nrows=2, sharey=True, sharex=True) 

这将使所有地块共享相关轴:

enter image description here

如果您想手动更改该特定的限制,可以在绘图命令的末尾添加此行:

ax4.set_ylim(top=5) 

# or for both limits like this: 
# ax4.set_ylim([-2, 5]) 

哪位能给这样的事情:

enter image description here

+0

感谢您的回复。第二张图是我正在寻找的,但我希望我不必指定范围“手动”。奇怪的是,如果我创建了第三行(或者列)的轴,但只绘制了前4或5轴,我得到了我想要的图形(但有2个空轴)。只有最后一个轴作为y值的更宽范围。我编辑了我的帖子以反映这种行为。 – Volty

+0

在这种情况下,'手动'就意味着你可以让任何轴取任何你喜欢的___范围的值。你不必每次都输入数字。在你的代码中有足够的东西来确保范围是_nice_:'ax4.set_ylim([df.Y4.min() - 1,df.Y4.max()+ 1])' – Primer