python - 在 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)
解决方案
我看到了两种方法:
- 与
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()
- 带
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()
推荐阅读
- python - Panda 的双括号索引 [[]]
- python - 读取缺少一些 EOL 的 CSV 文件
- python - 如何在python中迭代xml
- css - 为什么我的网站宽度小于我的屏幕分辨率
- jquery - Scroll div on click
- c++ - Get C++ RTTI as enum for dispatch in switch statement
- amazon-web-services - SQS 短轮询比长轮询更可取吗?
- java - Java+Kotlin Android 项目中 Kotlin 文件中未解决的引用错误
- android - 使用 FileProvider 使用相机捕获图像,如何存储 uri
- java - How do assert one list in another list with same order