Matplotlib图例与散点图元素颜色不匹配 如何同步循环数据的图例色值
问题根源
你现有代码的逻辑存在错误:循环2次的过程中,每次都调用plt.scatter绘制了全量569个数据点,两次生成的散点图层都沿用alldata['target']的全局颜色映射,最终图例的两个标签会复用最后一次散点图层的颜色配置,自然无法和两类样本的实际颜色匹配。
解决方案
推荐两种适配你场景的修正方案:
方案1:直接调用散点对象自动生成图例(无需拆分数据,适配大数据集)
不用循环绘制,直接通过scatter.legend_elements()方法自动提取色值和标签映射,是最简便的写法:
# 仅需绘制一次全量散点 scatter = plt.scatter(svd_pca_eqvt[:,0], svd_pca_eqvt[:,1], c=alldata['target']) # 手动传入标签和自动生成的图例元素绑定 plt.legend(handles=scatter.legend_elements()[0], labels=['benign', 'malignant'])
方案2:按类别筛选数据后循环绘制(方便自定义各类样式)
如果需要单独调整每一类的散点样式,可先按target值筛选对应样本再绘制:
# 根据你的实际target取值调整映射关系即可 label_map = {0: 'benign', 1: 'malignant'} for target_val, label in label_map.items(): # 仅筛选当前类别的样本下标 sample_idx = alldata['target'] == target_val plt.scatter(svd_pca_eqvt[sample_idx, 0], svd_pca_eqvt[sample_idx, 1], label=label) plt.legend()
两种方案都可以解决图例颜色不匹配的问题,你可以根据后续是否需要自定义单类样式选择即可。
内容的提问来源于stack exchange,提问作者Adam Rainah
相关产品推荐
相关产品推荐

