删除matplotlib边距

时间:2017-04-06 07:20:45

标签: matplotlib

我想在位置(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上找到的所有建议,但没有任何效果。

enter image description here

1 个答案:

答案 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()

enter image description here

可以看出,Rectangle确实位于(0,0)。但是,默认情况下,imshow绘图的轴限制从(-0.5,-0.5)开始。原因是像素的中间默认被视为像素位置。

现在取决于你打算做什么。你可以

  1. 将矩形放在(-0.5,-0.5)
  2. 让图像缩放从(0,0)开始

    • plt.xlim(0,n)设置轴limtis y相同。 (这将裁剪半个像素)
    • 设置imshow范围plt.imshow(arr, extent=[0,n,0,n])