Matplotlib散点图如何为直接传颜色列表的scatter绘制分类图例
实现方案
无需拆分数据集重复调用plt.scatter,通过自定义图例句柄即可实现需求,原有核心绘图逻辑不需要修改。
注意:不建议使用map作为变量名,会覆盖Python内置的map()函数,以下示例将其替换为color_map,功能完全一致。
完整可运行代码
from sklearn.datasets import make_blobs import matplotlib.pyplot as plt from matplotlib.lines import Line2D # 生成测试数据 X, y = make_blobs(n_samples=300, centers=3, random_state=42) # 核心绘图逻辑和原有写法一致 color_map = {0: 'red', 1: 'green', 2: 'blue'} plt.scatter(X[:, 0], X[:, 1], c=[color_map[i] for i in y]) # 批量生成对应图例元素 custom_legend = [ Line2D( [0], [0], marker='o', color='w', markerfacecolor=color, markersize=10, label=f'类别 {cls_id}' ) for cls_id, color in color_map.items() ] # 挂载图例 plt.legend(handles=custom_legend) plt.show()
关键说明
- 代码中
Line2D的color='w'作用是隐藏点之间的连接线,只保留圆点标记,符合散点图例的展示需求 - 批量生成图例的写法适配任意数量的分类,不需要为每个分类单独编写配置
- 可通过修改
markersize参数调整图例中圆点的大小,修改marker参数更换标记形状(例如s为方块、^为三角)
运行后图例效果完全匹配需求:红色圆点对应类别0,绿色圆点对应类别1,蓝色圆点对应类别2,全程仅调用一次plt.scatter,无冗余代码。
内容的提问来源于stack exchange,提问作者NaiveBae
相关产品推荐
相关产品推荐

