首页 > 解决方案 > 在 matplotlib 中设置图像的位置

问题描述

我有一个包含三个图像文件名的列表,我想使用 matplotlib 绘制它们,我所做的尝试如下。我试图将它们全部绘制出来,但它们都绘制到同一个位置,因此最终图像出现在顶部。

我想在位置坐标 (0,0) 处绘制第一个,在 (100,200) 处绘制第二个,在 (200,200) 处绘制第三个。我阅读了 matplotlib.imshow 上的文档,但找不到如何使用坐标设置图像的位置。

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

imageList = ["foo.jpg", "bar.jpg", "foobar.jpg"]
coordinatesList = [[0,0],[100,200],[200,200]]

for i in range(3):
    imageFile = imageList[i]
    coordinate = coordinatesList[i]
    img=mpimg.imread(imageFile)
    imgplot = plt.imshow(img)

标签: pythonmatplotlib

解决方案


我看到了两种方法:

  1. matplotlib.transforms
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import matplotlib as mpl


imageList = ["image.jpg", "image.jpg", "image.jpg"]
coordinatesList = [[0, 0], [100, 200], [200, 200]]

ax = plt.gca()
ax.set_xlim(0, 300)
ax.set_ylim(0, 300)

for i in range(3):
    imageFile = imageList[i]
    img=mpimg.imread(imageFile)
    imgplot = ax.imshow(img)
    tx, ty = coordinatesList[i]
    transform = mpl.transforms.Affine2D().translate(tx, ty)
    imgplot.set_transform(transform + ax.transData)

plt.show()
  1. extent选项(但我知道我的图像尺寸):
import matplotlib.pyplot as plt
import matplotlib.image as mpimg


imageList = ["image.jpg", "image.jpg", "image.jpg"]
coordinatesList = [[0, 0], [100, 200], [200, 200]]

ax = plt.gca()
ax.set_xlim(0, 300)
ax.set_ylim(0, 300)

imgplot = [None] * len(imageList)
for i in range(3):
    imageFile = imageList[i]
    img=mpimg.imread(imageFile)
    tx, ty = coordinatesList[i]
    ax.imshow(img, extent=(tx, tx + 50, ty, ty + 50))

plt.show()

这是使用 50px 正方形作为图片的结果image.png在此处输入图像描述


推荐阅读