2015-12-24 589 views
5

我想使用matplotlib在圖像背景上繪製圖形。我發現如何做到這一點在MATLAB http://www.peteryu.ca/tutorials/matlab/plot_over_image_background在Python中繪製圖像背景

我已經試過這樣的一些基本的東西:

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平方。這就是你的形象在做什麼。

您可以使用extent參數進行控制,該參數的形式爲列表[left, right, bottom, top]

不使用範圍如下:

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

enter image description here

你可以看到,我們有一個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

我不知道是否該生產線將幫助傑克遜先生解決他的蛇問題。至少,它不會讓事情變得更困難。