这是一个代表
import urllib # to retrieve the file from the internet
from PIL import Image # to interpret the bytes as an image
import numpy as np # to work with arrays of numbers (the image is an array of pixels)
import matplotlib.pyplot as plt # for general plotting
# The URL for the file
url = r"https://upload.wikimedia.org/wikipedia/en/9/9d/The_Tilled_Field.jpg"
img = np.array(Image.open(urllib.request.urlopen(url)))
# Make a figure and axes
fig, ax = plt.subplots(figsize=(4.5, 6.4))
# Add the image to the axes
ax.imshow(img);
# Say where to put the ticks on the axes
ax.set_xticks(range(0,1300,100), minor=False)
ax.set_xticks(range(0,1300,20), minor=True)
ax.set_yticks(range(0,900,100), minor=False)
ax.set_yticks(range(0,900,20), minor=True)
# Add some gridlines
ax.grid(which='minor', color='grey');
# I want this figure to be inlayed inside the bigger figure
ax.imshow(img, extent=[400,528,200,290]);
我认为范围会使第二个ax.imshow
图像放入第一个图像内,但事实并非如此。
如果我删除该行,它就会完全符合我的预期。但是当我使用这条线时,而不是在指定范围内绘制在上一张图像之上,它似乎创建了一个全新的绘图。
有谁知道我做错了什么?
我认为这里的解决方案是为镶嵌创建一个新的轴。图像通常不共享公共坐标系,并且如果图像不透明,则在同一轴上绘制时它们不会显示在彼此的顶部。棘手的部分是将坐标从参考图像转换为图形坐标,特别是因为 matplotlib 中的图像的原点位于顶部,导致 y 轴倒转。
然而,这是一个最小的例子:
这会创建:
我希望这有帮助!