控制Seaborn边缘直方图?

时间:2017-10-20 12:36:40

标签: 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("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()

2 个答案:

答案 0 :(得分:2)

jointplot有一个space参数,用于确定主图和边距图之间的空间。

运行此代码:

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()

为我创造了这个情节:

enter image description here

请注意,使用plt.tight_layout()投放会否决space的{​​{1}}参数。

编辑:

要进一步指定边际图的参数,可以使用jointplot。您必须传递一个字典,指定您使用的边缘图类型的参数。

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

这里我将展示如何更改用于制作边缘图的内核。

kde

生成此图表:

enter image description here

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

答案 1 :(得分:0)

好的,所以我要继续自己发一个额外的答案。我并不完全明白额外的marginal_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