Python 如何显示相邻的seaborn地块?使用pyplot样式(不是OO)?

Python 如何显示相邻的seaborn地块?使用pyplot样式(不是OO)?,python,matplotlib,seaborn,Python,Matplotlib,Seaborn,我想用相同的数据显示三个不同类型的图 下面的代码将一个接一个地显示它们: plt.figure() sns.displot(t['Age'], kind="kde", rug = True) sns.displot(t['Age'], kind="hist", bins = 25) sns.displot(t['Age'], kind="ecdf") plt.show() 有了pyplot绘图和none OO样式,我可以做类似

我想用相同的数据显示三个不同类型的图

下面的代码将一个接一个地显示它们:

plt.figure()

sns.displot(t['Age'], kind="kde", rug = True)

sns.displot(t['Age'], kind="hist", bins = 25)

sns.displot(t['Age'], kind="ecdf")

plt.show()
有了pyplot绘图和none OO样式,我可以做类似的事情:

plt.figure(figsize=(12,4))

plt.subplot(131)
plt.hist(t['Age'], bins = 22)

plt.subplot(132)
plt.hist(t['Age'], bins = 33)

plt.subplot(133)
plt.hist(t['Age'], bins = int(t['Age'].max() - t['Age'].min()))

plt.show()
plt.figure(figsize=(16,4))

plt.subplot(141)
sns.kdeplot(t['Age'])
plt.subplot(142)
sns.histplot(t['Age'])
plt.subplot(143)
sns.ecdfplot(t['Age'])
plt.subplot(144)
sns.rugplot(t['Age'])

plt.show()
看起来非常好。

为什么我不能这么做

plt.figure(figsize=(12,4))

plt.subplot(131)
sns.displot(t['Age'], kind="kde", rug = True)
plt.subplot(132)
sns.displot(t['Age'], kind="hist", bins = 25)
plt.subplot(133)
sns.displot(t['Age'], kind="ecdf")

plt.show()
这看起来糟透了

没有这个oo符号,有可能做到这一点吗

fig, (ax1, ax2, ax3) = plt.subplots(1,3)
sns.displot(..., ax=ax1)
sns.displot(..., ax=ax2)
...

好吧,通过一个简短但非常有启发性的研究,我得出了一个结论:

displat()非常灵活,可以绘制多种图形,有趣的是,每种图形都有自己的函数

您可以这样做:

plt.figure(figsize=(12,4))

plt.subplot(131)
plt.hist(t['Age'], bins = 22)

plt.subplot(132)
plt.hist(t['Age'], bins = 33)

plt.subplot(133)
plt.hist(t['Age'], bins = int(t['Age'].max() - t['Age'].min()))

plt.show()
plt.figure(figsize=(16,4))

plt.subplot(141)
sns.kdeplot(t['Age'])
plt.subplot(142)
sns.histplot(t['Age'])
plt.subplot(143)
sns.ecdfplot(t['Age'])
plt.subplot(144)
sns.rugplot(t['Age'])

plt.show()
避免OO风格。

但是在这种情况下,要将rugplot和kde绘图放在同一个轴上并不容易。当您尝试时:

plt.figure(figsize=(12,4))

plt.subplot(131)
sns.kdeplot(t['Age'])
plt.subplot(132)
sns.histplot(t['Age'])
plt.subplot(133)
sns.ecdfplot(t['Age'])
plt.subplot(131)
sns.rugplot(t['Age'])

plt.show()
所以你不应该因为这个警告而使用它

如果你想让它看起来漂亮,你需要更多的控制工具,OO风格可能是最好的解决方案:

fig, axes = plt.subplots(1,3, figsize=(12,4))

sns.kdeplot(t['Age'], ax = axes[0])
sns.histplot(t['Age'], ax = axes[1])
sns.ecdfplot(t['Age'], ax = axes[2])
sns.rugplot(t['Age'], ax = axes[0])

plt.show()

否,因为没有
ax
参数。这是一个很好的例子。请阅读文档。对于您想要的用法,请使用,它具有
ax
。我很好奇您为什么要避免OO接口。非常有趣,谢谢@TrentonMcKinney