如何绘制非方形 Seaborn jointplot 或 JointGrid

Posted

技术标签:

【中文标题】如何绘制非方形 Seaborn jointplot 或 JointGrid【英文标题】:How to plot non-square Seaborn jointplot or JointGrid 【发布时间】:2015-07-06 17:15:34 【问题描述】:

我正在尝试使用 Seaborn 的 JointGrid 绘制我的非对称数据。我可以让它使用相等的纵横比,但是我有不需要的空白:

如何删除填充? jointplot 和 JointGrid 的文档简单地说

大小:数字,可选

图形的大小(它将是正方形)。

我还尝试将extent kwarg 提供给jointplot 和JointGrid,以及ylim,但没有成功。

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
x = np.random.normal(0.0, 10.0, 1000)
y = np.random.normal(0.0, 1.0, 1000)
joint = sns.jointplot(x, y)
joint.plot_marginals(sns.distplot, kde=False)
joint.ax_joint.set_aspect('equal')  # equal aspect ratio
plt.show() 

【问题讨论】:

图形或hexbin单元格的纵横比有问题吗? 嗨@mwaskom,这个数字本身。我想摆脱填充并使其成为非方形,因为我的数据是我的坐标不是方形的。 我建议自己使用 matplotlib 命令设置图形。 【参考方案1】:

您需要设置 ylimxlim 参数,这会将 x 和 y 轴限制在您指定的元组范围内:

例如

sns.jointplot(x="n_estimators", y="learning_rate", data=data,
              color="#172235", height=8, ratio=10, space=0,
              ylim=(0, 1.1), xlim=(-20, 310))  # <-- this

【讨论】:

【参考方案2】:

对于将 Seaborn 用于 Jupyter Notebook 的用户,我建议在 sns.jointplot() 命令之后调用 set_figwidht()set_figheight()

my_plot=sns.jointplot(x="K",y="errori",data=risultati , kind="scatter")
my_plot.fig.set_figwidth(13)

Jupyter Example

【讨论】:

【参考方案3】:

偶然发现了这个问题,自己寻找答案。想通了,我想我会发布解决方案。由于jointplot 代码似乎非常坚持使用数字正方形,我不知道这是否被认为是不好的做法,但无论如何......

如果我们查看jointplot 代码并跟随它进入JointGrid,则jointplotsize 参数(同样是JointGrid)用于以下表达式:

f = plt.figure(figsize=(size, size))
# ... later on
self.fig = f

所以要得到一个非正方形的JointGrid 图,只需运行:

grid = sns.jointplot(...)
grid.fig.set_figwidth(6)
grid.fig.set_figheight(4)
grid.savefig("filename.png", dpi=300)

对于 6x4 图形。

【讨论】:

以上是关于如何绘制非方形 Seaborn jointplot 或 JointGrid的主要内容,如果未能解决你的问题,请参考以下文章

在 Seaborn Jointplot 上绘制对角线(相等线)

seaborn使用jointplot函数为散点图添加边缘图为散点图添加边缘直方图(Marginal Plot in Python with Seaborn jointplot)

使用 seaborn 的 Jointplot 多索引列

(数据科学学习手札62)详解seaborn中的kdeplotrugplotdistplot与jointplot

seaborn使用jointplot函数为散点图添加边缘图添加回归线为边缘直方图添加密度曲线(Add Regression Line to Marginal Plot)

Seaborn:我只想要一个对数刻度