这是我的工作,用于绘制使用在下部带有2种色调的kdeplot的pairgrid图:

python - seaborn pairgrid : using kdeplot with 2 hues-LMLPHP

我的脚本是:

import seaborn as sns
g = sns.PairGrid(df2,hue='models')
g.map_upper(plt.scatter)
g.map_lower(sns.kdeplot)
g.map_diag(sns.distplot)

在seaborn 0.6.0中,有没有一种方法可以根据色相在map_lower的kdeplot中使用更多色标?

在这种情况下,色相只有2个值。也许我缺少明显的东西。

最佳答案

我认为在PairGrid中使用hue_kwds会容易得多。
我在这里找到了一个很好的解释Plotting on data-aware grids,因为PairGrid中的文档对我来说还不够清楚。



本质上,hue_kws是列表的字典。关键字将使用列表中的值传递给单个绘图函数,hue变量的每个级别对应一个。请参见下面的代码示例。

我在分析中使用了数值列作为色相,但它在这里也应该起作用。如果没有,您可以轻松地将“模型”的每个唯一值映射为整数。

Martin Perez的不错答案中窃取信息,我会做类似的事情:

编辑:完整的代码示例

编辑2 :我发现kdeplot不适用于数字标签。相应地更改代码。

# generate data: sorry, I'm lazy and sklearn make it easy.
n = 1000
from sklearn.datasets.samples_generator import make_blobs
X, y = make_blobs(n_samples=n, centers=3, n_features=3,random_state=0)

df2 = pd.DataFrame(data=np.hstack([X,y[np.newaxis].T]),columns=['X','Y','Z','model'])
# distplot has a problem witht the color being a number!!!
df2['model'] = df2['model'].map('model_{}'.format)

list_of_cmaps=['Blues','Greens','Reds','Purples']
g = sns.PairGrid(df2,hue='model',
      # this is only if you use numerical hue col
#     vars=[i for i in df2.columns if 'm' not in i],
    # the first hue value vill get cmap='Blues'
    # the first hue value vill get cmap='Greens'
    # and so on
    hue_kws={"cmap":list_of_cmaps},
    )
g.map_upper(plt.scatter)
g.map_lower(sns.kdeplot,shade=True, shade_lowest=False)
g.map_diag(sns.distplot)
# g.map_diag(plt.hist)
g.add_legend()

python - seaborn pairgrid : using kdeplot with 2 hues-LMLPHP

通过对list_of_cmaps进行排序,您应该能够为分类变量的特定级别分配特定的阴影。

升级将是根据您需要的级别数动态创建list_of_cmaps

关于python - seaborn pairgrid : using kdeplot with 2 hues,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32889590/

10-10 15:18