Python 3.x 控制Seaborn边缘直方图?

Python 3.x 控制Seaborn边缘直方图?,python-3.x,seaborn,Python 3.x,Seaborn,问题1: 在打印边线时,如何删除打印中的多余空间?在第一篇文章中回答如下 问题2: 如何更好地控制边距直方图图,例如绘制直方图并确定边距的kde参数?在下面的第二篇文章中用JointGrid回答 #!/usr/bin/env python3 import matplotlib import matplotlib.pyplot as plt import seaborn as sns import numpy as np import pandas as pd sns.set_palette("

问题1: 在打印边线时,如何删除打印中的多余空间?在第一篇文章中回答如下

问题2: 如何更好地控制边距直方图图,例如绘制直方图并确定边距的kde参数?在下面的第二篇文章中用
JointGrid
回答

#!/usr/bin/env python3
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd

sns.set_palette("viridis")
sns.set(style="white", color_codes=True)

x = np.random.normal(0, 1, 1000)
y = np.random.normal(5, 1, 1000)

df = pd.DataFrame({"x":x, "y":y})

g = sns.jointplot(df["x"],df["y"], bw=0.15, shade=True, xlim=(-3,3), ylim=(2,8),cmap="coolwarm", kind="kde", stat_func=None)

# plt.tight_layout() # This will override seaborn parameters. Remember to exclude.
plt.show()

jointplot
有一个
space
参数,用于确定主绘图和marginplot之间的间距

运行此代码:

g = sns.jointplot(df["x"],df["y"], bw=0.15, shade=True, xlim=(-3,3), 
                  ylim=(2,8),cmap="coolwarm", kind="kde",
                  stat_func=None, space = 0)

plt.show()
对我而言,此图中的结果:

请注意,使用
plt.tight_layout()
运行将否决
jointplot
space
参数

编辑:

要进一步指定边缘图的参数,可以使用
marginal\u kws
。您必须传递一个字典,该字典指定您使用的边缘打印类型的参数

在您的示例中,您使用
kde
绘图作为边缘绘图。因此,我将继续以此为例:

这里我展示了如何更改用于生成边缘图的内核

g = sns.jointplot(df["x"],df["y"], bw=0.15, shade=True, xlim=(-3,3), 
                  ylim=(2,8),cmap="coolwarm", kind="kde",
                  stat_func=None, space = 0, marginal_kws={'kernel': 'epa'})


plt.show()
生成此图:


您可以在字典中将kde绘图接受的任何参数作为键传递,并将该参数的所需值作为该键的值传递。

jointplot
具有一个
space
参数,该参数确定主绘图和MarginPlot之间的空间

运行此代码:

g = sns.jointplot(df["x"],df["y"], bw=0.15, shade=True, xlim=(-3,3), 
                  ylim=(2,8),cmap="coolwarm", kind="kde",
                  stat_func=None, space = 0)

plt.show()
对我而言,此图中的结果:

请注意,使用
plt.tight_layout()
运行将否决
jointplot
space
参数

编辑:

要进一步指定边缘图的参数,可以使用
marginal\u kws
。您必须传递一个字典,该字典指定您使用的边缘打印类型的参数

在您的示例中,您使用
kde
绘图作为边缘绘图。因此,我将继续以此为例:

这里我展示了如何更改用于生成边缘图的内核

g = sns.jointplot(df["x"],df["y"], bw=0.15, shade=True, xlim=(-3,3), 
                  ylim=(2,8),cmap="coolwarm", kind="kde",
                  stat_func=None, space = 0, marginal_kws={'kernel': 'epa'})


plt.show()
生成此图:


您可以将kde绘图接受的任何参数作为键传递到字典中,并将该参数所需的值作为该键的值。

好的,所以我将继续,自己发布一个额外的答案。对于我来说,额外的
marginal\u kws
可以控制哪些参数并不完全清楚。相反,使用
JointGrid
逐层构建绘图(尤其是来自ggplot)可能更直观:

g = sns.JointGrid(x="x", y="y", data=df)            # Initiate multi-plot
g.plot_joint(sns.kdeplot)                           # Plot the center x/y plot as sns.kdeplot
g.plot_marginals(sns.distplot, kde=True)            # Plot the edges as sns.distplot (histogram), where kde can be set to True

好的,我会继续写一个额外的答案。对于我来说,额外的
marginal\u kws
可以控制哪些参数并不完全清楚。相反,使用
JointGrid
逐层构建绘图(尤其是来自ggplot)可能更直观:

g = sns.JointGrid(x="x", y="y", data=df)            # Initiate multi-plot
g.plot_joint(sns.kdeplot)                           # Plot the center x/y plot as sns.kdeplot
g.plot_marginals(sns.distplot, kde=True)            # Plot the edges as sns.distplot (histogram), where kde can be set to True

不是很好吗?它有一个所有参数的列表,以及许多示例。现在,如果你想控制某个特定的东西,你需要告诉它是什么,否则(除了
空间
)这真的太宽泛了。现在还不清楚你想要实现什么。似乎更像是一个橡皮鸭问题,而不是任何有人可以帮助你的问题。除非您决定指定一个问题。“恢复”在这里是什么意思?期望的输出是什么?好的,如果这个线程只是用来混淆,要我关闭它吗?不,只是清楚地说明问题是什么。而且你已经有答案了。因此,在限制条件下,您可以编辑问题,使@error的答案匹配。更改了一点。现在更简洁了吗?还不是很好吗?它有一个所有参数的列表,以及许多示例。现在,如果你想控制某个特定的东西,你需要告诉它是什么,否则(除了
空间
)这真的太宽泛了。现在还不清楚你想要实现什么。似乎更像是一个橡皮鸭问题,而不是任何有人可以帮助你的问题。除非您决定指定一个问题。“恢复”在这里是什么意思?期望的输出是什么?好的,如果这个线程只是用来混淆,要我关闭它吗?不,只是清楚地说明问题是什么。而且你已经有答案了。因此,在限制条件下,您可以编辑问题,使@error的答案匹配。更改了一点。现在更简洁了吗?