我想在位置(0,0)的图像上绘制一个框。但matplotlib添加了一个边距,使得框不会触及图像的边缘。这是我的代码,请注意我添加了一个全零的假图像,然后将框绘制在它上面。
import matplotlib.pyplot as plt
import matplotlib.patches as patches
fig, ax = plt.subplots(1)
ax.axis('off')
ax.imshow(np.zeros((100, 100)))
p = patches.Rectangle((0, 0), 50, 50, edgecolor='yellow')
ax.add_patch(p)
这是我得到的输出。注意顶部和左侧的薄边距。我尝试了在StackOverflow上找到的所有建议,但没有任何效果。
答案 0 :(得分:3)
为了看看发生了什么,让我们靠近一点,不要关掉轴
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import numpy as np; np.random.seed(0)
fig, ax = plt.subplots(1)
#ax.axis('off')
ax.imshow(np.random.rand(7, 7))
p = patches.Rectangle((0, 0), 5, 5, edgecolor='yellow', alpha=0.7)
ax.add_patch(p)
plt.show()
可以看出,Rectangle确实位于(0,0)
。但是,默认情况下,imshow绘图的轴限制从(-0.5,-0.5)
开始。原因是像素的中间默认被视为像素位置。
现在取决于你打算做什么。你可以
(-0.5,-0.5)
让图像缩放从(0,0)开始
plt.xlim(0,n)
设置轴limtis y
相同。 (这将裁剪半个像素)plt.imshow(arr, extent=[0,n,0,n])