如何在matplotlib/Python中将散点图直接叠加在jpg图像上?
我需要快速绘制一些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()
想了解更多信息,可以查看文档。