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

如何在Matplotlib中为同-NumPy数组的分组散点图添加图例

解决Matplotlib中同一数组分组数据的图例添加问题

嘿,我刚好碰到过类似的需求,给你分享几个简单有效的方案,帮你给散点图加上清晰的图例!

你的核心问题在于:一次性绘制所有散点时,Matplotlib无法区分不同分组的点,自然没法自动生成图例。所以我们需要按标签分组,分别绘制每个组的点,这样每个组就能对应一个图例项了。

方案一:按标签分组循环绘制(最直观)

这是最容易理解和实现的方法,步骤很简单:

  • 获取所有唯一的标签值
  • 循环每个标签,筛选出对应的数据点单独绘制
  • 给每个分组的scatter调用指定label参数
  • 最后调用legend()生成图例

完整代码示例

import matplotlib.pyplot as plt
import numpy as np

# 模拟你的四列数据集(替换成你自己的数据即可)
data = np.random.rand(100, 4)
data[:, 3] = np.random.choice([1, 2, 3], size=100)  # 最后一列是1/2/3的标签

x = data[:, 0]
y = data[:, 1]
labels = data[:, 3]

fig = plt.figure()
ax = fig.add_subplot(111)

# 获取所有不重复的标签
unique_labels = np.unique(labels)

# 自定义颜色列表(可选,也可以用Matplotlib默认颜色循环)
colors = ['#FF5733', '#33FF57', '#3357FF']

# 循环绘制每个分组
for idx, label in enumerate(unique_labels):
    # 筛选当前标签对应的所有点
    group_mask = labels == label
    # 绘制散点:大小用15*label,颜色对应自定义列表,同时设置label
    ax.scatter(
        x[group_mask], 
        y[group_mask], 
        s=15*label, 
        c=colors[idx], 
        label=f'Group {int(label)}'
    )

# 添加图例,还可以用loc参数调整位置,比如loc='upper left'
ax.legend(title='Groups')
plt.show()

补充说明

  • 如果你不想自定义颜色,Matplotlib的默认颜色循环(C0、C1、C2...)也能直接用,比如c=f'C{idx}'
  • 图例的样式可以通过legend()的参数调整,比如title设置图例标题,bbox_to_anchor=(1.05, 1)把图例放在图的右侧外面,避免遮挡数据
  • 要是你的标签不是数字,也完全适用,只需要把label=f'Group {int(label)}'改成对应的名称就行

这样操作后,你就能得到每个分组对应的清晰图例啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:53:14