Python 根据Seaborn散点图中的列,允许标记颜色的阴影在类别内变化

Python 根据Seaborn散点图中的列,允许标记颜色的阴影在类别内变化,python,seaborn,scatter-plot,color-shade,Python,Seaborn,Scatter Plot,Color Shade,在使用色调识别类别和特定列定义标记大小的Seaborn散点图中,是否可能根据第三列允许标记颜色的“阴影”在类别内变化(由色调定义) 以下示例使用hue标识类别 (根据df['cat'])和df['p']改变标记大小。但是,它不允许标记颜色的阴影在类别内变化(如色调所定义)。我想使用df['q']来实现这一点 将numpy导入为np 作为pd进口熊猫 将matplotlib.pyplot作为plt导入 导入seaborn作为sns sns.set() df=pd.DataFrame({'x':np

在使用
色调
识别类别和特定列定义标记大小的Seaborn散点图中,是否可能根据第三列允许标记颜色的“阴影”在类别内变化(由
色调
定义)

以下示例使用
hue
标识类别 (根据
df['cat']
)和
df['p']
改变标记大小。但是,它不允许标记颜色的阴影在类别内变化(如
色调
所定义)。我想使用
df['q']
来实现这一点

将numpy导入为np
作为pd进口熊猫
将matplotlib.pyplot作为plt导入
导入seaborn作为sns
sns.set()
df=pd.DataFrame({'x':np.random.normal(大小=50),
“y”:np.随机.正常(大小=50),
“cat”:np.random.randint(1,4,size=50),
“p”:np.随机.均匀(大小=50),
“q”:np.random.uniform(大小=50)})
df.head()
图,ax=plt.子批次(图尺寸=(8,8),紧密布局=真)
ax=sns.scatterplot(数据=df,x='x',y='y',色调='cat',大小='p')
plt.show()

最难的部分是获得正确的调色板。你必须选择最亮和最暗的颜色与其他颜色完全不同的调色板来区分它们。我在本例中选择了cubehelix方法,但您将遇到更多类别的问题

您可能需要定义自己的调色板集,并确保可以在色带上的任何点将它们区分开来

这只是在每个类别上循环,并在另一个类别上绘制一个类别,同时更改颜色方案

plt.figure(figsize=(15,15))
sns.set_style("white")
edge_color = ['blue','brown','green']

for i, x in enumerate(df.cat.unique()):

    t = df[df['cat']==x]
    p = sns.cubehelix_palette(start=i, rot=0, dark=.1, light=.7, as_cmap=True)
    g = sns.scatterplot(data = t, x='x',y='y', hue = 'q', size='p', palette=p, legend=None, edgecolor=edge_color[i])
    
plt.legend(title='Category', loc='upper left', labels=df.cat.unique())
leg = g.get_legend()

leg.legendHandles[0].set_color('Blue')
leg.legendHandles[1].set_color('Brown')
leg.legendHandles[2].set_color('Green')