2015-12-24 6 views
5

matplotlibを使って画像の背景にグラフをプロットしたいと思います。私はこのような基本的な何かしようとしたhttp://www.peteryu.ca/tutorials/matlab/plot_over_image_backgroundpythonの画像の背景にプロットする

MathWorks社のMATLABでそれを行う方法が見つかりました:

im = plt.imread("dd.png") 
implot = plt.imshow(im) 
theta=np.linspace(0,2*np.pi,50) 
z=np.cos(theta)*39+145 
t=np.sin(theta)*39+535-78+39 
plt.plot(z,t) 
plt.show() 

を、それは私には本当に醜い何か与えた:ちょうどのように

something really ugly

+2

'imshow'は、イメージがどこに置かれ、座標空間にあるかを指定するためのもっと多くの引数を取ることができます。デフォルトでは、左上隅は(0、0)に配置され、各ピクセルは幅と高さが1x1単位です。 –

答えて

17

をあなたがリンクしたMATLABの例では、imshowを呼び出すときに画像の望ましい範囲を指定する必要があります。

デフォルトでは、matplotlibとMATLABは両方とも画像の左上隅を原点とし、そこから右下に移動し、各ピクセルを座標空間で1x1四角形として設定します。これはあなたのイメージがやっていることです。

これは、リスト[left, right, bottom, top]の形式をとるextentパラメータで制御できます。

が広がりを使用していないが、次のようになります。

import matplotlib.pyplot as plt 
img = plt.imread("airlines.jpg") 
fig, ax = plt.subplots() 
ax.imshow(img) 

enter image description here

あなたはサミュエル・L・ジャクソンが、率直に言って、彼の乗っ蛇とかなりイライラの私たちは1600×1200を持っていることがわかります航空便。

しかし、我々は、この上で、両方の次元で0から300までのラインをプロットしたい場合は、私たちはそれを行うことができます。

fig, ax = plt.subplots() 
x = range(300) 
ax.imshow(img, extent=[0, 400, 0, 300]) 
ax.plot(x, x, '--', linewidth=5, color='firebrick') 

enter image description here

ラインがする場合、私は知りませんジャクソン氏がヘビの問題を解決するのを助けてください。少なくとも、それは事をそれ以上に困難にすることはありません。