2011-08-09 24 views
23

私のデータをプロットして、それに背景イメージ(マップ)を追加したいと思います。 データはlong/lat値でプロットされ、イメージの3つのコーナー(左上、右上、左下)のlong/lat値もあります。matplotlib.pyplot.imshowで 'extent'を使用する方法

私はimshowで 'extent'オプションを使用する方法を理解しようとしています。しかし、私が見つけた例では、各コーナーにxとyを割り当てる方法は説明していません(私の場合、3つのコーナーの情報があります)。

イメージに3つのコーナーの位置をプロットに追加するにはどうすればよいですか?

ありがとう

答えて

29

エクステントは、水平値と垂直値の画像の最大値と最小値を定義します。次のような4つの値を取ります:extent=[horizontal_min,horizontal_max,vertical_min,vertical_max]

横軸に経度があるとすると、extent=[longitude_top_left,longitude_top_right,latitude_bottom_left,latitude_top_left]になります。 longitude_top_leftとlongitude_bottom_leftは同じでなければなりません。latitude_top_leftとlatitude_top_rightは同じでなければならず、これらのペアの値は同じです。

イメージの最初の要素を左下にプロットする場合は、origin='lower'のimshowオプションも使用します。そうでない場合は、 'upper'のデフォルト値が必要です。

+0

まだ明確ではありません。 「水平値の最大値」はどういう意味ですか?水平な値はありません:2次元マトリックスがあります。各行で最大値を意味しますか?しかし、彼らの束があります。それらの最大値は?しかし、水平と垂直は同じです。 –

+0

maxは、プロットの行列の右端に書かれた数値です.minは、左端の数値です。 – Yann

8

エクステントの使用を示すhttp://matplotlib.org/examples/pylab_examples/image_demo3.htmlに基づく例です。

#!/usr/bin/env python 
from pylab import * 
try: 
    from PIL import Image 
except ImportError, exc: 
    raise SystemExit("PIL must be installed to run this example") 

import matplotlib.cbook as cbook 

datafile = cbook.get_sample_data('ada.png') 
h = Image.open(datafile) 
dpi = rcParams['figure.dpi'] 
figsize = h.size[0]/dpi, h.size[1]/dpi 

figure(figsize=figsize) 
ax = axes([0,0,1,1], frameon=False) 
ax.set_axis_off() 
ax.set_xlim(0,2) 
ax.set_ylim(0,2) 
im = imshow(h, origin='upper',extent=[-2,4,-2,4]) # axes zoom in on portion of image 
im2 = imshow(h, origin='upper',extent=[0,.5,0,.5]) # image is a small inset on axes 

show() 

あなたは軸の範囲を設定しない場合、彼らはその後、任意の効果を持っていないようです&あなたのエクステントになります。

Ada Lovelace image with inset

関連する問題