我想使用seaborn猫图来指定特定观察结果的颜色。在一个虚构的例子中:
import seaborn as sns
import random as r
name_list=['pepe','Fabrice','jim','Michael']
country_list=['spain','France','uk','Uruguay']
favourite_color=['green','blue','red','white']
df=pd.DataFrame({'name':[r.choice(name_list) for n in range(100)],
'country':[r.choice(country_list) for n in range(100)],
'fav_color':[r.choice(favourite_color) for n in range(100)],
'score':np.random.rand(100),
})
sns.catplot(x='fav_color',
y='score',
col='country',
col_wrap=2,
data=df,
kind='swarm')
我想为所有观测值上色(或用另一种独特的方式标记,也可以是标记),名称为“ pepe”。我该怎么做?我不介意其他颜色,如果它们都一样会更好。
答案 0 :(得分:1)
您可以通过向数据框添加布尔列并将其用作hue
调用的catplot()
参数来获得所需的结果。这样,您将获得两种颜色的结果(一种用于pepe
观测值,另一种用于其他观测值)。结果可以在这里看到:
还应该设置参数legend=False
,因为否则is_pepe
的图例将出现在侧面。
代码如下:
df['is_pepe'] = df['name'] == 'pepe'
ax = sns.catplot(x='fav_color',
y='score',
col='country',
col_wrap=2,
data=df,
kind='swarm',
hue='is_pepe',
legend=False)
此外,您可以使用参数palette
和顶级功能sns.color_palette()
为两种观测值(pepe和notpepe)指定所需的两种颜色,如下所示:< / p>
ax = sns.catplot(x='fav_color',
y='score',
col='country',
col_wrap=2,
data=df,
kind='swarm',
hue='is_pepe',
legend=False,
palette=sns.color_palette(['green', 'blue']))
获得此结果: