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 组映射颜色?
您可以定义颜色列表。在 X
和 Y
列分组后,使用 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 的回答,创建列后,您可以使用 seaborn
的 hue
参数绘制它们:
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)
输出:
我有一个包含 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 组映射颜色?
您可以定义颜色列表。在 X
和 Y
列分组后,使用 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 的回答,创建列后,您可以使用 seaborn
的 hue
参数绘制它们:
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)
输出: