我在将 Seaborn Jointplot
放入多 subplot
时遇到问题。
import pandas as pd
import seaborn as sns
df = pd.DataFrame({'C1': {'a': 1,'b': 15,'c': 9,'d': 7,'e': 2,'f': 2,'g': 6,'h': 5,'k': 5,'l': 8},
'C2': {'a': 6,'b': 18,'c': 13,'d': 8,'e': 6,'f': 6,'g': 8,'h': 9,'k': 13,'l': 15}})
fig = plt.figure();
ax1 = fig.add_subplot(121);
ax2 = fig.add_subplot(122);
sns.jointplot("C1", "C2", data=df, kind='reg', ax=ax1)
sns.jointplot("C1", "C2", data=df, kind='kde', ax=ax2)
请注意 jointplot
的一部分是如何放置在子图中的,其余部分是如何留在另外两个图框中的。我想要的是将 distributions
也插入到 subplots
中。
有人能帮忙吗?
原文由 Afloz 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 matplotlib 中移动轴不像以前的版本那样容易。下面是使用当前版本的 matplotlib。
正如在几个地方( 这个问题,也是 这个问题)指出的那样,一些 seaborn 命令会自动创建自己的图形。这是硬编码到 seaborn 代码中的,因此目前无法在现有图中生成此类图。 Those are
PairGrid
,FacetGrid
,JointGrid
,pairplot
,jointplot
andlmplot
.有一个 可用的 seaborn fork, 它允许为各个类提供子图网格,以便在预先存在的图形中创建图。要使用它,您需要将
axisgrid.py
从 fork 复制到 seaborn 文件夹。请注意,这目前仅限于与 matplotlib 2.1(也可能是 2.0)一起使用。另一种方法是创建一个 seaborn 图形并将轴复制到另一个图形。 此答案 中显示了此原理,并且可以扩展到 Searborn 地块。实现比我最初预期的要复杂一些。以下是一个类
SeabornFig2Grid
可以使用 seaborn 网格实例(上述任何命令的返回)、matplotlib 图和subplot_spec
,这是一个位置一个gridspec
网格。注意:这是一个 概念验证,它可能适用于大多数简单的情况,但我不建议在生产代码中使用它。
此类的用法如下所示:
请注意,复制轴可能有几个缺点,并且上述内容尚未(尚未)经过彻底测试。