2012-06-08 2 views
9

미안합니다. 바보 같은 질문이지만 matplotlib.pyplot으로 파이썬에서 타원을 그리는 쉬운 방법이 있습니까? matplotlib.pyplot.arrow와 비슷한 것이있을 것으로 기대했지만 아무것도 찾을 수 없습니다.matplotlib.pyplot (Python)을 사용하여 플롯 타원

matplotlib.patches와 함께 draw_artist 또는 비슷한 것을 사용하는 유일한 방법은 무엇입니까? 나는 더 간단한 방법이 있기를 바랄 것이지만, 문서는별로 도움이되지 않습니다.

어떤 조언을 주셔서 감사합니다!

답변

7

matplotlib ellipse demo을 보았습니까? 여기서는 matplotlib.patches.Ellipse을 사용합니다.

+0

을 나는 표준 플로팅 방법에 더 가까운 것을 기대했지만, 다음으로 살펴 보겠습니다. 감사! – casper

+0

matplotlib.pyplot에서 무언가를 찾고있는 것으로 나타났습니다. 죄송합니다. 처음에는 그걸 알지 못했습니다. 'matplotlib.pyplot' API 문서를 검색해도 아무 것도 밝혀지지 않았기 때문에'matplotlib.patches.Ellipse'를 사용하여 살아야 할 것 같습니다. – Chris

+0

고마워요, 그렇게해야 할 것 같습니다. 필자는 pyplot에 기본적인 모양을 그리는 기능을 포함 시키려고했지만 모든 것을 가질 수는 없다고 생각합니다. – casper

10

matplotlib 타원 데모가 좋습니다. 하지만 for 루프 없이는 내 코드에서 구현할 수 없습니다. 축 수치 오류가 발생했습니다. 여기서 제가 대신 한 것은입니다. 물론 xy 중심점은 타원을 그렸던 이미지를 기반으로하는 각각의 너비와 높이를 가진 자체 좌표입니다.

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) 

이 코드는 부분적으로 this page의 첫 번째 코드 상자를 기반으로합니다. matplotlib.patches.Ellipse에 대한 링크는 위의 Chris의 답변을 참조하십시오.

0

patche를 사용하지 않으려는 경우 타원의 매개 변수 방정식을 사용할 수 있습니다. 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() 

: x-oriented ellipse with parametric equation 타원는 2D 회전 행렬 덕분 회전 수

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

결과 : rotated ellipse with parametric equation