无论 seaborn matplotlib 中的调色板如何,在散点图中更改 1 点颜色
Change 1 point color in scatter plot regardless of color palette in seaborn matplotlib
我有一个 pandas 数据框 df
像这样
NAME VALUE ID
A 0.2 X
B 0.4 X
C 0.5 X
D 0.8 X
...
Z 0.3 X
我想通过指定 hue='NAME' 为 'NAME' 列的所有点着色,但指定一个点的颜色:B。
如何只指定 1 个点的颜色,并让 "hue" 命令处理其余部分(每个点 A-Z 都有唯一的颜色)?
现在这是我的绘图命令,其中 hue 是名称。
plot = sns.stripplot(x="ID", y="VALUE", hue="NAME", data=df, jitter=True, c=df['NAME'], s=7, linewidth=1)
您可以通过将调色板中的一种颜色转换为颜色列表来替换调色板中的一种颜色,然后将其中一种颜色替换为您喜欢的其他颜色。
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()
除了直接提供调色板,还可以(感谢@mwaskom 指出这一点)使用(色调名称、颜色)对的字典:
levels = df["NAME"].unique()
colors = sns.color_palette("hls", len(levels))
colors = dict(zip(levels, colors))
colors[special_letter] = special_color
我有一个 pandas 数据框 df
像这样
NAME VALUE ID
A 0.2 X
B 0.4 X
C 0.5 X
D 0.8 X
...
Z 0.3 X
我想通过指定 hue='NAME' 为 'NAME' 列的所有点着色,但指定一个点的颜色:B。
如何只指定 1 个点的颜色,并让 "hue" 命令处理其余部分(每个点 A-Z 都有唯一的颜色)?
现在这是我的绘图命令,其中 hue 是名称。
plot = sns.stripplot(x="ID", y="VALUE", hue="NAME", data=df, jitter=True, c=df['NAME'], s=7, linewidth=1)
您可以通过将调色板中的一种颜色转换为颜色列表来替换调色板中的一种颜色,然后将其中一种颜色替换为您喜欢的其他颜色。
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()
除了直接提供调色板,还可以(感谢@mwaskom 指出这一点)使用(色调名称、颜色)对的字典:
levels = df["NAME"].unique()
colors = sns.color_palette("hls", len(levels))
colors = dict(zip(levels, colors))
colors[special_letter] = special_color