在Seaborn散点图中,有可能使用hue
来标识类别,并使用特定列来定义标记大小,以允许标记颜色的“阴影”在一个类别内变化(定义为由hue
)根据第三列?
以下示例使用hue
来标识类别
(根据df['cat']
)和df['p']
来更改标记大小。但是,它不允许标记颜色的阴影在类别内(由hue
定义)变化。我想使用df['q']
来做到这一点。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
df = pd.DataFrame({'x': np.random.normal(size=50),
'y': np.random.normal(size=50),
'cat': np.random.randint(1,4,size=50),
'p': np.random.uniform(size=50),
'q': np.random.uniform(size=50)})
df.head()
fig, ax = plt.subplots(figsize=(8,8), tight_layout=True)
ax = sns.scatterplot(data = df, x='x',y='y', hue = 'cat', size='p')
plt.show()
答案 0 :(得分:1)
最困难的部分是获得正确的调色板。您必须选择最亮和最暗的颜色与其他颜色足够不同的调色板,以区分它们。在这个示例中,我选择了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')