2017-07-21 3 views
2
import matplotlib.pyplot as plt 
import numpy as np 

n = 16 

im = np.eye(n) 

fig = plt.figure() 
ax = fig.add_subplot(121) 
ax.imshow(im) 
ax = fig.add_subplot(122) 
ax.imshow(im, extent=(0, n, 0, n)) 

plt.show() 

結果enter image description hereimshowのエクステント引数がイメージを反転させるのはなぜですか?次の図 で

私はこのextentで、両方の数字は(ほとんど)同じですが、そうでないことを期待しているでしょう:y軸が反転しているかに注意してください。もっと厄介なのは、右の数字が間違っているということです。原点の値は0であるのに対し、原点の値は1です。

エクステントのy引数を反転すると、extent=(0, n, n, 0)が予想されるようになります。

私はそれを理解するよう

imshowextent引数の説明、

程度:スカラー(左、右、下、上)、オプション、デフォルト:None

位置左下および右上のコーナーの、データ座標内にある。 Noneの場合、ピクセル中心がゼロベースの(行、列)インデックスになるようにイメージが配置されます。

は、実際にその動作については明示的ではありません。

私の質問は、このフリップが起こるのはなぜですか、なぜ期待される振る舞いを得るためにトップ/ボトムを逆転しなければならないのでしょうか?

私はthis questionを読んだ

EDITは、OPは、反転の問題を言及していないと答えは、どちらかの問題をもたらすものではありません。

設定するとorigin='lower'要素は最初の画像ピクセルを(0,0)に持っていますが、画像は逆さまに表示されます。

これらの動作を一貫して説明するには簡単な説明がありますが、それをまだピン止めすることはできません。

+0

画像が左から右、上から下に描画されている可能性があります。だから、「トップ= n」と「ボトム= 0」は「ボトムアップ」です。 –

答えて

3

imshowには、引数originがあります。デフォルトはorigin="upper"です。これは、文書によると、「左下と右上のコーナーのデータ座標における位置」を設定するextentの設定と矛盾します。これは、origin = "lower"が設定されている場合にのみ当てはまります。

上位は「あなたがして、原点を設定した場合、 『私はhave already proposed

のような文でドキュメントを拡張する』任意のyがあなたが広がりおよび/またはYLimプロパティの必要性を使用して指定することができ座標逆にします。」

これはあなたがすでに自分で見つけたものです。だから、オプションは次のとおりです。

  • あなたが左上隅に原点に画像をしたい場合:あなたは、左下隅に原点に画像をしたい場合は

    origin="upper", extent=(0, n, n, 0) 
    
  • origin="lower", extent=(0, n, 0, n) 
    
+0

ありがとうございます。ただし、両方のオプションは同じではありません。画像は、2番目のオプションで上下逆に表示されます。 – user1735003

+0

はい、確かです。しかし、データは正しく表示されます。あなたが好きなオリエンテーションを決めるのはあなた次第です。 – ImportanceOfBeingErnest

+0

絶対に。私は、この精度を追加することを提案していました。というのも、両方のオプションが同様に動作することを示唆していると思われるからです。 – user1735003

関連する問題