web-dev-qa-db-ja.com

matplotlib.pyplot(Python)で楕円をプロットする

これは愚かな質問ですが、Pythonでmatplotlib.pyplotを使用して楕円をプロットする簡単な方法はありますか? matplotlib.pyplot.arrowのようなものがあると思っていましたが、何も見つかりません。

Matplotlib.patchesをdraw_artistなどと一緒に使用する唯一の方法はありますか?もっと簡単な方法があるといいのですが、ドキュメントはあまり役に立ちません。

アドバイスをありがとう!

15
hjweide

matplotlib ellipse demo を見たことはありますか?ここでは matplotlib.patches.Ellipse

7
Chris

Matplotlib ellipseデモは素晴らしいです。しかし、forループなしではコードに実装できませんでした。 Axesの図エラーが発生しました。代わりにここに私がやったことがあります。もちろん、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)

このコードは、部分的に このページ の最初のコードボックスに基づいています。 matplotlib.patches.Ellipseへのリンクについては、上記のChrisの応答を参照してください。

16
max29

パッチを使用したくない場合は、楕円のパラメトリック方程式を使用できます。

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

8
jeannej