是否有一种人道的方式来创建包含seaborn lmplot和residplot并排的pyplot图?

问题描述 投票:0回答:1

我正在尝试为相同的数据并排绘制 lmplot 和 residplot。

import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
sns.set()

y_true = [4.7, 8.9, 6.2, 7.8, 8.1, 11.7, 7.2, 15.8, 1.1, 6.8, 9.1, 4.6, 21.5, 7.6, 6.2, 13.6, 30.1, 25.5, -0.1]  
x = [1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 7.5, 8.0, 8.5, 9.0, 9.5, 10.0]

data = pd.DataFrame({"y_true" : y_true, "x" : x})
fig, ax = plt.subplots(1, 2)
sns.lmplot(x="x", y="y_true", data=data, height=3, aspect=1.5)
sns.residplot(data=data, x="x", y="y_true")
plt.show()

上面的代码显然没有按照我的预期工作,因为它在同一轴上绘制了 lmplot 和 residplot。通常的解决方案是将 ax 参数传递给 seaborn 绘图函数。

然而,通过谷歌搜索,我发现将 ax 参数传递给 lmplot 和 residplot 出于某种原因不久前已被弃用(顺便说一句,我完全被这个事实震惊了。我的意思是,看在上帝的份上,为什么?为什么你会弃用已经有效的标准功能,没有可行的替代方案!?),现在我能找到的唯一解决方案(除了像this这样的过时答案)是将两个图保存为单独的图像,然后粘合图像,这看起来非常复杂。所以我想知道是否有一些内置方法可以将 lmplots 和 residplots 绘制为子图。

python python-3.x matplotlib plot seaborn
1个回答
0
投票

不要使用图形级别的

lmplot
,而是使用
regplot
:

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(9, 3))
sns.regplot(x="x", y="y_true", data=data, ax=ax1)
sns.residplot(data=data, x="x", y="y_true", ax=ax2)

输出:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.