如何在matplotlib/Python中将散点图直接叠加在jpg图像上?

61 投票
5 回答
137617 浏览
提问于 2025-04-16 12:15

我需要快速绘制一些jpg格式的图像,这些图像是一个跟踪算法的输出结果。每个jpg图像都有一个伴随的文本文件,里面包含简单的(x,y)数据,用来定位正在跟踪的图像目标。我想用matplotlib来绘制这些jpg图像,然后在上面叠加一个散点图,显示从文本文件读取的(x,y)数据,并把这些数据存储到一个Python的列表里。下面的代码可以绘制jpg图像,但我在查找matplotlib、scipy和PIL的手册和帮助页面时,找不到任何说明如何保持这个绘图窗口,并在图像的不同(x,y)位置上简单叠加散点图的内容。任何帮助都非常感谢。

import matplotlib.pyplot as plt;
im = plt.imread(image_name);
implot = plt.imshow(im);
plt.show()

5 个回答

12

我知道这个问题已经有人回答过了,但其实 zorder 也有类似的用法。如果你想在散点图上面放东西或者下面放东西,这个功能就很有用了。

import matplotlib as plt
im = plt.imread(image_name)
plt.imshow(im,zorder=1)
plt.scatter(x,y,zorder=2)
plt.show()

zorder 数值越低,表示它的位置在其他东西的下面。

15

这个应该可以用:

import matplotlib.pyplot as plt
im = plt.imread('test.png')
implot = plt.imshow(im)
plt.plot([100,200,300],[200,150,200],'o')
plt.show()

记住,图像中的每个像素在x和y轴上都代表一个单位。'o'是一个简写方式,用来让plot函数使用圆圈来代替线条。

92

pyplot.scatter()这个函数就是为了这个目的特别设计的:

import matplotlib.pyplot as plt
im = plt.imread(image_name)
implot = plt.imshow(im)

# put a blue dot at (10, 20)
plt.scatter([10], [20])

# put a red dot, size 40, at 2 locations:
plt.scatter(x=[30, 40], y=[50, 60], c='r', s=40)

plt.show()

想了解更多信息,可以查看文档

撰写回答