使用matplotlib绘制椭圆,pyplot

b5lpy0ml  于 2023-05-01  发布在  其他
关注(0)|答案(3)|浏览(199)

如果这是一个愚蠢的问题,对不起,但是有没有一种简单的方法在Python中用matplotlib.pyplot绘制椭圆?我希望有类似于matplotlib.pyplot.arrow的东西,但我找不到任何东西。
使用matplotlib.patchesdraw_artist或类似的东西来实现它的唯一方法是什么?我希望有一个更简单的方法,但文档并没有提供太多帮助。

olhwl3o2

olhwl3o21#

如果不想使用面片,可以使用椭圆的参数方程:
int x = a(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()

其给出:

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

返回:

h6my8fg2

h6my8fg22#

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上的第一个代码框。请参阅上面Chris的回复,以获得matplotlib.patches.Ellipse的链接。

35g0bw71

35g0bw713#

你看过matplotlib ellipse demo吗?这里使用matplotlib.patches.Ellipse

相关问题