2012-06-08 5 views
9

Sorry, wenn das eine dumme Frage ist, aber gibt es eine einfache Möglichkeit, eine Ellipse mit Matplotlib.pyplot in Python zu plotten? Ich hatte gehofft, dass Matplotlib.pyplot.arrow ähnlich wäre, aber ich finde nichts.Plot Ellipse mit Matplotlib.pyplot (Python)

Ist die einzige Möglichkeit, es mit Matplotlib.patches mit draw_artist oder etwas ähnliches zu tun? Ich hoffe, dass es eine einfachere Methode gibt, aber die Dokumentation bietet keine große Hilfe.

Danke für jede Beratung!

Antwort

7

Haben Sie die matplotlib ellipse demo gesehen? Hier verwenden sie matplotlib.patches.Ellipse.

+0

Ich hoffte auf etwas, das näher an den Standard-Plotting-Methoden lag, aber ich werde mich als nächstes damit befassen. Vielen Dank! – casper

+0

Gerade bemerkt, dass Sie etwas in Matplotlib.pyplot gesucht haben. Tut mir leid, habe das nicht bemerkt. Eine Suche in der 'matplotlib.pyplot' API-Dokumentation verrät nichts, daher müssen Sie mit' matplotlib.patches.Ellipse' leben. – Chris

+0

Danke, es scheint, dass ich das tun muss. Ich hätte erwartet, dass pyplot einige grundlegende Funktionen zur Formplotting enthält, aber ich nehme an, dass man nicht alles haben kann! – casper

10

Die Matplotlib Ellipse Demo ist nett. Aber ich konnte es ohne eine for-Schleife nicht in meinem Code implementieren. Ich bekam einen Achsenfigurfehler. Hier ist was ich getan habe, wo natürlich das xy-Zentrum meine eigenen Koordinaten mit der jeweiligen Breite und Höhe sind, basierend auf dem Bild, über dem ich die Ellipse gezeichnet habe.

from matplotlib.patches import Ellipse 

plt.figure() 
ax = plt.gca() 

ellipse = Ellipse(xy=(157.18, 68.4705), width=0.036, height=0.012, 
         edgecolor='r', fc='None', lw=2) 
ax.add_patch(ellipse) 

Dieser Code wird auf this page teilweise auf der ersten Code-Box basiert. Siehe Chris Antwort oben für einen Link zu matplotlib.patches.Ellipse.

0

Wenn Sie keinen Patch verwenden möchten, können Sie die parametrische Gleichung einer Ellipse verwenden: x = u + a.cos (t); y = v + b.sin (t)

import numpy as np 
from matplotlib import pyplot as plt 
from math import pi 

u=1.  #x-position of the center 
v=0.5 #y-position of the center 
a=2.  #radius on the x-axis 
b=1.5 #radius on the y-axis 

t = np.linspace(0, 2*pi, 100) 
plt.plot(u+a*np.cos(t) , v+b*np.sin(t)) 
plt.grid(color='lightgray',linestyle='--') 
plt.show() 

Welche gibt: x-oriented ellipse with parametric equation Die Ellipse kann dank einer 2D-Rotationsmatrix gedreht werden:

import numpy as np 
from matplotlib import pyplot as plt 
from math import pi, cos, sin 

u=1.  #x-position of the center 
v=0.5  #y-position of the center 
a=2.  #radius on the x-axis 
b=1.5  #radius on the y-axis 
t_rot=pi/4 #rotation angle 

t = np.linspace(0, 2*pi, 100) 
Ell = np.array([a*np.cos(t) , b*np.sin(t)]) 
    #u,v removed to keep the same center location 
R_rot = np.array([[cos(t_rot) , -sin(t_rot)],[sin(t_rot) , cos(t_rot)]]) 
    #2-D rotation matrix 

Ell_rot = np.zeros((2,Ell.shape[1])) 
for i in range(Ell.shape[1]): 
    Ell_rot[:,i] = np.dot(R_rot,Ell[:,i]) 

plt.plot(u+Ell[0,:] , v+Ell[1,:])  #initial ellipse 
plt.plot(u+Ell_rot[0,:] , v+Ell_rot[1,:],'darkorange') #rotated ellipse 
plt.grid(color='lightgray',linestyle='--') 
plt.show() 

Returns: rotated ellipse with parametric equation