2017-04-06 5 views
2

場所(0、0)の画像にボックスを描きたい。しかし、matplotlibは、ボックスが画像の端に触れないようにマージンを追加します。ここで私のコードは、私はすべての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

答えて

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)で始まります。その理由は、ピクセルの中央がデフォルトでピクセル位置とみなされるためです。

これはあなたの意図にかかっています。あなたはどちらか(-0.5,-0.5)

  • で矩形が軸の設定のいずれか

    • で(0,0)での画像スケーリングスタートをしてみましょう

      1. 場所はyに同じplt.xlim(0,n) limtisことがあります。
      2. plt.imshow(arr, extent=[0,n,0,n])
  • 関数imshow範囲を設定する(これはハーフピクセルをトリミングします)
    関連する問題