【发布时间】:2022-01-20 23:03:13
【问题描述】:
我怎样才能在图例中只显示一次名称,用相应的颜色而不是索引?
data = {'x':[0, 1, 2, 3, 4],
'y':[4, 3, 2, 1, 0],
'Name':['Tom', 'Nick', 'Tom', 'Nick', 'Emma'],
'Color':['blue', 'red', 'blue', 'red', 'green']}
df = pd.DataFrame(data)
plt.figure()
plt.scatter(df['x'], df['y'], color = df['Color'], label = df['Name'])
plt.legend()
我知道这可以使用 Seaborn 完成,但我更喜欢在 Matplotlib 中完成(并且没有 for 循环)。
【问题讨论】:
-
单独绘制每个点,如图所示here
-
@Mr.T 没有循环的方法吗?我知道这在 Seaborn 中是可能的,但我想直接在 matplotlib 中这样做
-
Matplotlib 每次调用
scatter只支持一个标签。幸运的是,您可以使用 seaborn 或循环来解决问题。 -
@JohanC 那么Seaborn 会在内部执行循环吗?鉴于我已经有一个具有指定颜色的列,在我的情况下循环会是什么样子?
-
你的进程有点不正常。通常,您有一些代码会根据名称创建
'Color'列,例如使用字典。在这种情况下,您需要从数据帧中重建字典,例如color_dict = {name: color for name, color in zip(df['Name'], df['Color'])}。然后你可以使用sns.scatterplot(data=df, x='x', y='y', hue='Name', palette=color_dict)。或循环:for name in df['Name'].unique(): plt.scatter('x', 'y', data=df[df['Name']==name], color=color_dict[name], label=name)
标签: python python-3.x pandas matplotlib legend