You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib散点图图例显示异常:标签数不符、颜色映射错误问题

问题原因

两个异常的核心诱因是scatter.legend_elements()方法的默认逻辑:

  • 该方法默认将传入的颜色映射视为连续值,自动做等分采样生成图例项,num参数为默认值'auto'时最多返回10个条目,不会匹配你实际的19个离散类别,直接导致图例标签数量缺失。
  • 默认采样逻辑是按色条范围等距取色,返回的图例手柄和你传入的19个pitch唯一值不存在一一对应关系,强行配对就会出现颜色和标签错位,比如标签'15'匹配不到预设的深蓝色。
修复方法

调用legend_elements()时显式指定num=len(u),强制方法生成和离散类别数量完全一致的图例手柄,即可保证标签数量完整、颜色和值一一对应。

修正后的可运行代码:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import matplotlib.colors as colors
import matplotlib.cm as cm
import numpy as np

df = pd.DataFrame({
"X" : [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37], 
"Y" : [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37], 
"pitch":[10,10,20,20,30,40,50,50,60,60,60,70,70,70,70,80,80,80,100,150,1,2,3,4,5,6,7,8,9,10,3,4,5,8,9,10,3],
})

color = cm.jet
u, div = np.unique(df.pitch.values, return_inverse=True)
colorlist = [colors.rgb2hex(color(i)) for i in np.linspace(1, 0, len(u))]
cmap = ListedColormap(colorlist)
fig,ax = plt.subplots(figsize=(10,8))
scatter = plt.scatter(df['X'],df['Y'], c=div, cmap=cmap)
# 关键修改:指定生成和类别数等量的图例项
plt.legend(*scatter.legend_elements(num=len(u)), labels=u, loc=2)
plt.show()

原错误代码运行效果:
错误运行效果截图

内容的提问来源于stack exchange,提问作者Brian Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 00:33:20