我在为散点图标记着色方面遇到了一些问题。我有一个简单的数据框,其中包含一个值“pos”和另外两个值“af_min”和“af_max”。 我想根据af_x和af_y的某些条件来着色标记,但由于我没有利用作为hue的任何列,所以我创建了自己的列“color”。
pos af_x af_y color
0 3671023 0.200000 0.333333 2.0
1 4492071 0.176471 0.333333 2.0
2 4492302 0.222222 0.285714 2.0
3 4525905 0.298246 0.234043 2.0
4 4520905 0.003334 0.234043 1.0
5 4520905 0.400098 0.000221 0.0
6 4520905 0.001134 0.714043 1.0
7 4520905 0.559008 0.010221 0.0
现在,我用seaborn和一个seaborn调色板创建散点图的方法如下:
sns.scatterplot(data=df, x="af_x", y="af_y", hue="color", palette="hsv", s=40, legend=False)
但结果如下: 可以看到有一个hue没有着色,因为只有两种颜色,蓝色和红色。 .
现在非常奇怪的事情发生了: 为了绕过这个问题,我构建了自己的调色板并将它添加到seaborn实例中。但是散点图不是用我选择的阴影着色,而是用我之前某个时候在另一个脚本中使用的一些颜色来着色,而且无法更改。这里是绘图:
以下是代码:
#violet #green #orange
colors = ['#747FE3', '#8EE35D', '#E37346']
sns.set_palette(sns.color_palette(colors))
sns.scatterplot(data = df, x="af_x", y="af_y", hue="color", s=40, legend=False)
以下是整个脚本,您可以复制它:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
lst = [[3671023, 0.200000, 0.333333], [4492071, 0.176471, 0.333333],
[4492302, 0.222222, 0.285714], [4525905, 0.298246, 0.234043],
[4520905, 0.003334, 0.234043], [4520905, 0.400098, 0.000221],
[4520905, 0.001134, 0.714043], [4520905, 0.559008, 0.010221]
]
df = pd.DataFrame(lst, columns =['pos', 'af_x', 'af_y'])
afMin=0.1
afMax=0.9
df['color']=np.nan
for index in df.index:
afx=df.loc[index, "af_x"]
afy=df.loc[index, "af_y"]
if ((afx >= afMin and afx <= afMax) and (afy < afMin or afy > afMax)):
df.loc[index, "color"] = 0
elif ((afy >= afMin and afy <= afMax) and (afx < afMin or afx > afMax)):
df.loc[index, "color"] = 1
elif ((afy >= afMin and afy <= afMax) and (afx >= afMin or afx <= afMax)):
df.loc[index, "color"] = 2
sns.scatterplot(data = df, x="af_x", y="af_y", hue="color", palette = "hsv", s=40,
legend=False)
plt.savefig("stack_why_hsv.png")
#violet #green #orange
colors = ['#747FE3', '#8EE35D', '#E37346']
sns.set_palette(sns.color_palette(colors))
sns.scatterplot(data = df, x="af_x", y="af_y", hue="color", s=40, legend=False)
plt.savefig("stack_why_personal.png")
感谢任何能提供帮助的人!