这是我的工作,用于绘制使用在下部带有2种色调的kdeplot的pairgrid图:
我的脚本是:
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()
通过对
list_of_cmaps
进行排序,您应该能够为分类变量的特定级别分配特定的阴影。升级将是根据您需要的级别数动态创建
list_of_cmaps
。关于python - seaborn pairgrid : using kdeplot with 2 hues,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32889590/