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

Matplotlib绘图图例异常:点颜色与图例不匹配

问题解决:按分类数组匹配绘图颜色与图例

你的代码核心问题是每次循环都绘制了全部x、y点,最后还额外叠加了一次所有点的绘制,导致所有点被最后一次的颜色覆盖;而图例因为循环多次添加条目显示了不同颜色,但实际绘图点并没有按z的值分类显示。

错误原因拆解

  • 循环for i in (z2)中,plt.plot(x, y, 'o', label=i)每次都把所有x、y点重复绘制一遍,没有筛选对应z=i的点
  • 最后一行plt.plot(x, y, 'o')再次覆盖所有点的颜色,导致最终所有点颜色完全一致

修正后的代码

import matplotlib.pyplot as plt
import numpy as np

x = [0.54638897, 0.74436089, 0.36840323, 0.67932601, 0.56410781, 0.20797502,
 0.54681392, 0.47598874, 0.33771962, 0.6626352,  0.06115377, 0.37277143,
 0.43410935, 0.97386762, 0.69819935, 0.62578862, 0.15594451, 0.43509243,
 0.3712351,  0.94039755]
y = [0.45281763, 0.85509999, 0.65361185, 0.87928696, 0.00333544, 0.92478824,
 0.95129375, 0.15493552, 0.06571068, 0.31728336, 0.58555545, 0.52413135,
 0.43512262, 0.91267715, 0.56997665, 0.93413675, 0.57615435, 0.18518019,
 0.98207871, 0.99850326]
z = [1,1,1,1,5,5,5,11,11,11,1,1,6,6,8,8,11,9,9]

# 转为numpy数组,方便使用布尔索引筛选子集
x_np = np.array(x)
y_np = np.array(y)
z_np = np.array(z)

# 获取唯一分类值
z2 = np.unique(z_np)

# 遍历每个分类,筛选对应点并绘制
for val in z2:
    # 生成当前分类的筛选掩码
    mask = z_np == val
    # 只绘制该分类下的x、y点,颜色自动匹配图例
    plt.plot(x_np[mask], y_np[mask], 'o', label=val)

plt.legend()
plt.grid()
plt.show()

关键修正点

  1. 将x、y、z转为numpy数组,利用布尔索引精准筛选对应分类的点
  2. 循环中通过mask = z_np == val获取当前分类的点索引,只绘制该分类的子集
  3. 移除最后多余的全量绘制代码,避免覆盖分类点的颜色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:31:57