2013-03-01 18 views
14

私は、画像を背景としてポイントのセットをプロットしています。私は例のLena画像を使用しました:これはenter image description hereが私を与える既知のコーナー座標を持つプロットに背景画像を追加する

import numpy as np 
import matplotlib.pyplot as plt 
from scipy.misc import imread 

np.random.seed(0) 
x = np.random.uniform(0.0,10.0,15) 
y = np.random.uniform(0.0,10.0,15) 
img = imread("lena.jpg") 
plt.scatter(x,y,zorder=1) 
plt.imshow(img,zorder=0) 
plt.show() 

私の質問は次のとおりです。プロット内の画像のコーナー座標を指定するにはどうすればよいですか?左下がx, y = 0.5, 1.0、右上がx, y = 8.0, 7.0になるようにしたいとします。画像はデータを一致させることができますように、ある程度の

imshow(img, zorder=0, extent=[left, right, bottom, top]) 

要素がデータ単位で指定する必要があります。

+2

です。「scipy.misc import imread'は私にとっては機能しません。代わりに、http://stackoverflow.com/questions/5073386/how-do-you-directly-overlay-a-scatter-plot-on-top-of-a-jpg-image-in-matplotlib – toom

+0

@おそらく古いバージョンのSciPyを持っているでしょう – YXD

+0

うん、私はscipyバージョン '0.12.0'を使っています。このバージョンは2013年9月より古すぎないようです(http://sourceforge.net/projects/scipy/files/scipy/)。私はそれを私のMacにbrew経由でインストールしました。 – toom

答えて

28

extentキーワードはimshowです。引き数の順番は[left, right, bottom, top]

import numpy as np 
import matplotlib.pyplot as plt 
from scipy.misc import imread 
import matplotlib.cbook as cbook 

np.random.seed(0) 
x = np.random.uniform(0.0,10.0,15) 
y = np.random.uniform(0.0,10.0,15) 

datafile = cbook.get_sample_data('lena.jpg') 
img = imread(datafile) 
plt.scatter(x,y,zorder=1) 
plt.imshow(img, zorder=0, extent=[0.5, 8.0, 1.0, 7.0]) 
plt.show() 
+0

素晴らしい作品です。私が追加しなければならなかったのは、 'plt.xlim'と' plt.ylim'を設定することです。さもなければ、ビューポート/軸は背景画像にしっかりとフィットします。 – YXD

+0

いいね! YXDありがとう!誰かが同じことに遭遇した場合に追加したいだけです.plt.scatter()、plt.imshow()を実行すると、Figureは画像でカバーされ、サイズは "extent" kwargで定義されます。このような場合は、まずplt.imshow()を実行してからplt.scatter()を実行してください。次に、あなたのデータ(x、y)によって決定されるサイズと、グラフ上に表示される画像とが表示されます。 – Ruby

7

あなたはextentキーワードパラメータを使用する必要があります。これは、例えば、地理参照された地図画像上に地理的経路(座標配列)を重ねるために使用することができる。

関連する問題