无论seaborn matplotlib中的调色板如何,都在散点图中更改1点颜色

时间:2017-08-20 19:34:26

标签: pandas matplotlib seaborn scatter

我有像这样的pandas数据框NAME VALUE ID A 0.2 X B 0.4 X C 0.5 X D 0.8 X ... Z 0.3 X

plot = sns.stripplot(x="ID", y="VALUE", hue="NAME", data=df, jitter=True, c=df['NAME'], s=7, linewidth=1)

我想通过' NAME'为所有要点着色。通过指定hue =' NAME'但是指定一个点的颜色:B。

如何仅为1点指定颜色,并使用" hue"命令处理其余的(每个点A-Z有一个独特的颜色)?

现在这是我的绘图命令,其中色调是NAME。

grocery_list

1 个答案:

答案 0 :(得分:2)

您可以将调色板中的一种颜色转换为颜色列表,然后将其中一种颜色替换为您喜欢的其他颜色。

import pandas as pd
import numpy as np;np.random.seed(42)
import matplotlib.pyplot as plt
import seaborn as sns

letters = list(map(chr, range(ord('A'), ord('Z')+1)))
df = pd.DataFrame({"NAME" : letters, 
                   "VALUE": np.sort(np.random.rand(len(letters)))[::-1],
                   "ID" : ["X"]*len(letters)})

special_letter = "B"
special_color = "indigo"

levels = df["NAME"].unique()
colors = sns.color_palette("hls", len(levels))
inx = list(levels).index(special_letter)
colors[inx] = special_color

ax = sns.stripplot(x="ID", y="VALUE", hue="NAME", data=df, 
                     jitter=True,  s=7, palette=colors)

ax.legend(ncol=3, bbox_to_anchor=(1.05,1), loc=2)
ax.figure.subplots_adjust(right=0.6)
plt.show()

enter image description here

不是直接提供调色板,也可以(感谢@mwaskom指出那个)使用(色调名称,颜色)对的字典:

levels = df["NAME"].unique()
colors = sns.color_palette("hls", len(levels))
colors = dict(zip(levels, colors))
colors[special_letter] = special_color