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

如何在Matplotlib的plt.scatter中为标记添加对应序号以实现手动按序选点?

如何在Matplotlib的plt.scatter中为标记添加对应序号以实现手动按序选点?

嗨,我明白你想要的效果啦——就是给每个红色十字标记加上对应的顺序编号,这样就能清楚看到每个点在列表里的位置,方便手动按序选点对吧?其实实现起来很简单,只需要在你现有的代码基础上,加一段遍历每个点并添加文本标注的逻辑就行,我来给你一步步说明:

基础实现:给已有坐标点添加序号

先修改你原本的代码,给每个scatter标记加上对应的序号:

import matplotlib.pyplot as plt
import numpy as np

img = plt.imread("image.png") 
x = np.random.rand(1, 20)*img.shape[1]
y = np.random.rand(1, 20)*img.shape[0]
size = 50

# 把形状为(1,20)的x、y转成一维数组,方便遍历每个点
x_flat = x.flatten()
y_flat = y.flatten()

plt.imshow(img, cmap="gray") # 绘制底层图像
plt.scatter(x_flat, y_flat, size, c="r", marker="+") # 绘制红色十字标记

# 遍历每个点,添加序号文本
for idx, (px, py) in enumerate(zip(x_flat, y_flat)):
    # 在点的右上方偏移一点的位置写序号,避免和标记重叠
    # 偏移量可以根据你的图像大小自行调整
    plt.text(px + 5, py + 5, str(idx+1), fontsize=10, color="blue")

plt.show()

关键细节说明:

  • 用flatten()把原本二维的x、y数组转成一维,这样每个元素对应一个点的坐标,遍历起来更直观;
  • enumerate会同时返回点的索引和坐标,索引加1就是我们要显示的序号(因为Python索引从0开始,而我们需要从1开始的编号);
  • plt.text()用来在指定位置添加文本,这里给坐标加了5个像素的偏移,你可以根据图像的实际分辨率调整这个数值,确保序号和红色标记不重叠;
  • 还可以自定义文本的字体大小、颜色,比如我这里用了蓝色10号字体,让序号更醒目。

进阶:手动交互式选点并自动加序号

如果你需要的是手动点击图像选点,同时自动给每个点加上顺序序号,可以结合Matplotlib的ginput()函数实现,完全贴合你手动选点的需求:

import matplotlib.pyplot as plt
import numpy as np

img = plt.imread("image.png") 
size = 50

plt.imshow(img, cmap="gray")
plt.title("点击图像选点,按回车键结束选点")

# 手动选点,最多选20个(可以修改n的值调整最大选点数量)
selected_points = plt.ginput(n=20)

# 遍历选点结果,添加标记和序号
for idx, (px, py) in enumerate(selected_points):
    plt.scatter(px, py, size, c="r", marker="+")
    plt.text(px + 5, py + 5, str(idx+1), fontsize=10, color="blue")

plt.show()

# 还可以把选好的点坐标保存下来,方便后续使用
x_selected = np.array([p[0] for p in selected_points])
y_selected = np.array([p[1] for p in selected_points])

这样你就可以按自己需要的顺序点击图像上的点,程序会自动给每个点加上红色十字标记和对应的序号,最后还能把选点的坐标保存下来供后续处理~

备注:内容来源于stack exchange,提问作者100xln2

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 06:59:39