如何将图例添加到具有颜色分配的散点图

Posted

技术标签:

【中文标题】如何将图例添加到具有颜色分配的散点图【英文标题】:How to add legend to scatter plot that has colour assignment 【发布时间】:2017-06-30 01:07:10 【问题描述】:

我有一个 x 和 y 值列表以及每个点的颜色分配列表(“绿色”、“蓝色”、“红色”等)。我发现的所有示例都基于单独的 plt.scatter() 命令生成了一个图例,后来一个简单的 plt.legend() 就足够了。 making matplotlib scatter plots from dataframes in Python's pandas。我的散点图没有针对每个彩色组的单独散点图。那么如何生成显示每个组颜色的图例?

import matplotlib.pyplot as plt

colors = ["red", "orange", "green", "blue", "purple", "gray"]
regions = ["Hanoi", "Nha Trang", "Vung Tau", "Phu Quoc", "Quang Ngai", "Saigon"]
region_colors=dict(zip(regions,colors))

grp_color=[]
for i in data['Region']:
    grp_color.append(region_colors[i]) 

x_long=data[' Longitude']
y_lat=data[" Latitude"]
plt.scatter(x_long,y_lat,c=grp_color)
plt.legend(grp_color,regions,loc='right')

【问题讨论】:

这里的逻辑反了。通常,为具有不同颜色的散点图生成图例的最简单方法是将数据拆分,绘制不同的散点图(或正常图)并使用plt.legend() 所以我应该返回数据框并将其拆分,以便我可以分别绘制每个组? 这当然是一种选择。您也可以在下面使用我的答案。 【参考方案1】:

假设你有一个颜色列表 colors = ["blue", "red", "green"] 和区域列表regions = ["Africa", "America", "Australia"] 您可以创建一个图例句柄列表并使用它来创建图例:

handlelist = [plt.plot([], marker="o", ls="", color=color)[0] for color in colors]
plt.legend(handlelist,regions,loc='right')

【讨论】:

感谢您的快速建议,我在您的代码中收到此错误消息:“ValueError: to_rgba: Invalid rgba arg "Islands" to_rgb: Invalid rgb arg "Islands" 无法将字符串转换为浮点数: '岛屿'' 好的,因为我的 region_colors 是字典,所以我用 region_colors.values() 替换了 region_colors。但传说没有显示任何东西,它只是一个白色方块 我编辑了答案,现在应该可以直接为您工作了。 太棒了,它奏效了。非常感谢!为什么我们只取handlelist的第一个元素? 我们只取行列表的第一个元素并将其放入handlelistplt.plot() 返回一个行列表(在这种情况下只有一个),我们需要列表中的那个项目,而不是列表本身。

以上是关于如何将图例添加到具有颜色分配的散点图的主要内容,如果未能解决你的问题,请参考以下文章

如何在python的散点图中添加具有不同标记的多个图例?

在基础R的散点图中转换图例的形状和颜色

来自颜色字典的 matplotlib.pyplot 散点图图例

可视化实验十:利用Python绘制棒图散点图

可视化实验十:利用Python绘制棒图散点图

100天精通Python(可视化篇)——第82天:matplotlib绘制不同种类炫酷散点图参数说明+代码实战(二维散点图三维散点图散点图矩阵)