2017-04-06 93 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])