gpt4 book ai didi

python - seaborn pairgrid : using kdeplot with 2 hues

转载 作者:太空狗 更新时间:2023-10-29 18:27:42 27 4
gpt4 key购买 nike

这是我努力绘制的 pairgrid 图,该图使用下部的 kdeplot 和 2 种色调:

enter image description here

我的脚本是:

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有没有办法根据hue在map_lower的kdeplot中使用更多的色阶?

在这种情况下,色调只有 2 个值。也许我遗漏了一些明显的东西。

最佳答案

  • sns.kdeplot:shade_lowest替换为threshshade替换为fill 。但是,不再需要指定这些参数。
  • sns.distplot 替换为 sns.histplot
  • seaborn 0.12.0 中测试
import seaborn as sns
from sklearn.datasets import make_blobs
import numpy as np

# generate data
n = 1000
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'])

# kdeplot and histplot treat numbers and strings differently when using hue.
# since model is a category, convert the column to a string type
df2['model'] = df2['model'].astype(str)

g = sns.PairGrid(df2, hue='model')

g.map_upper(plt.scatter)
g.map_lower(sns.kdeplot)
g.map_diag(sns.histplot, kde=True, stat='density', bins=20)

_ = g.add_legend()

enter image description here


原始答案

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

You can also let other aspects of the plot vary across levels of thehue variable, which can be helpful for making plots that will be morecomprehensible when printed in black-and-white. To do this, pass adictionary to hue_kws where keys are the names of plotting functionkeyword arguments and values are lists of keyword values, one for eachlevel of the hue variable.

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

我在分析中使用了色调的数字列,但它在这里也应该有效。如果没有,您可以轻松地将“models”的每个唯一值映射到整数。

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

enter image description here

排序 list_of_cmaps 您应该能够将特定的阴影分配给分类变量的特定级别。

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

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com