2015-12-24 6 views
5

Ich möchte ein Diagramm über einen Bildhintergrund mit Matplotlib plotten. Ich fand, wie es in Matlab zu tun http://www.peteryu.ca/tutorials/matlab/plot_over_image_backgroundPlot über einen Bildhintergrund in Python

ich etwas Grundsätzliches wie dies versucht haben:

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() 

aber es gab mir etwas wirklich hässlich:

something really ugly

+2

'imshow' kann viel mehr Argumente benötigen, mit denen Sie angeben können, wo das Bild platziert wird und seine Ausdehnung im Koordinatenraum. Standardmäßig befindet sich die obere linke Ecke bei (0, 0) und jedes Pixel hat eine Breite und Höhe von 1x1 Einheiten. –

Antwort

17

Genau wie in der MATLAB Beispiel, mit dem Sie verbunden haben, müssen Sie den gewünschten Umfang des Bildes angeben, wenn Sie imshow aufrufen.

standardmäßig matplotlib und MATLAB sowohl Ort der obere linke Ecke des Bildes des Ursprung, gehen nach unten und nach rechts von dort, und legt jedes Pixel als ein 1x1-Quadrat im Raum koordinieren. Dies ist, was dein Bild macht.

Sie können dies mit dem Parameter extent steuern, der die Form einer Liste [left, right, bottom, top] annimmt.

Nicht Ausmaß mit sieht wie folgt aus:

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

enter image description here

können Sie sehen, dass wir eine 1600 x 1200 von Samuel L. Jackson haben bekommen, ehrlich gesagt, ziemlich verärgert mit der Schlange an Bord seines Flug der Fluggesellschaft.

Aber wenn wir eine Linie im Bereich von 0 bis 300 in beiden Dimensionen über diese darstellen möchten, können wir nur tun, dass:

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

Ich weiß nicht, ob die Linie hilf Mr. Jackson mit seinem Schlangenproblem. Zumindest wird es die Dinge nicht schwieriger machen.