Pandas 为每两个值对创建一种颜色

Pandas create a color for each two value pair

我有一个包含 XY 值的数据框,我想将其绘制在散点图中。我想创建具有相同 XY 值并在绘图中应用相同颜色的组:

df = pd.DataFrame({'X': [1.1, 1.1, 5.5, 5.5, 5.5,10.1],
                   'Y': [3.7, 3.7, 5.6, 5.6, 5.6, 3.2],
                   'ID': ['ID1', 'ID2','ID3','ID4','ID5', 'ID6'})


X        Y         ID         color (hex or RGB)
1.1      3.7       ID1        0,255,255
1.1      3.7       ID2        0,255,255
5.5      5.6       ID3        255,0,255
5.5      5.6       ID4        255,0,255
5.5      5.6       ID5        255,0,255
10.1     3.2       ID6        0,0,255

如何为每个 XY 组映射颜色?

您可以定义颜色列表。在 XY 列分组后,使用 ngroup() 获取组 ID,然后将其映射到颜色列表

colors = ['0,255,255', '255,0,255', '0,0,255']

df['color'] = df.groupby(['X', 'Y']).ngroup().map(dict(enumerate(colors)))
print(df)

      X    Y   ID      color
0   1.1  3.7  ID1  0,255,255
1   1.1  3.7  ID2  0,255,255
2   5.5  5.6  ID3  255,0,255
3   5.5  5.6  ID4  255,0,255
4   5.5  5.6  ID5  255,0,255
5  10.1  3.2  ID6    0,0,255

跟进 Ynjxsjmh 的回答,创建列后,您可以使用 seabornhue 参数绘制它们:

sct = sns.scatterplot(x=df['X'],y=df['Y'],hue=df['color'],c=np.array([[int(w) for w in y] for y in [x.split(",") for x in colors]])/255)
plt.legend(title="My Groups",labels=['Group 1','Group 2','Group 3'])
plt.title("My Scatterplot") 
plt.show(sct)

输出: