2017-04-06 99 views
2

我想在位置(0,0)的图像上绘制一个框。但matplotlib添加了一个边框,使得该框不会触及图像的边缘。这里是我的代码,注意我添加了一个全零的假图像,然后在上面画一个盒子。删除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

回答

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

可以看出,矩形确实放置在(0,0)。然而,默认情况下,imshow图的轴限制从(-0.5,-0.5)开始。原因在于像素的中间部分默认被认为是像素位置。

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

  1. 发生在(-0.5,-0.5)
  2. 矩形由要么

    • 设置轴设在(0,0)的图像缩放开始limtis plt.xlim(0,n)同为y。 (这将裁剪半个像素)
    • 设置imshow程度plt.imshow(arr, extent=[0,n,0,n])