Solución:
La demostración de matplotlib ellipse es agradable. Pero no pude implementarlo en mi código sin un bucle for. Estaba obteniendo un error de figura de ejes. Esto es lo que hice en su lugar, donde, por supuesto, el centro xy son mis propias coordenadas con el ancho y alto respectivos según la imagen sobre la que tracé la elipse.
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)
Este código se basa parcialmente en el primer cuadro de código de esta página. Consulte la respuesta de Chris más arriba para obtener un enlace a matplotlib.patches.Ellipse
.
Si no desea utilizar un parche, puede utilizar la ecuación paramétrica de una elipse:
x = u + a cos
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
plt.grid(color="lightgray",linestyle="--")
plt.show()
Lo que da:
La elipse se puede rotar gracias a una matriz de rotación 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
#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()
Devoluciones:
¿Has visto la demostración de matplotlib ellipse? Aquí usan matplotlib.patches.Ellipse
.