Я пытался построить эллипс (круг) с двумя разными секциями, представленными двумя разными стилями линий. Поскольку я строю эллипс с 3D-координатами в 2D-пространстве, я хочу, чтобы часть эллипса с Z‹0 имела другой стиль линии, а для Z›0 — еще один стиль линии. Однако в итоге я получаю линию, проходящую через середину эллипса. Вот короткая часть моего кода и образец изображения:
import matplotlib.pyplot as plt
import numpy as np
class orbels:
import numpy as np
def __init__(self,a,e,i,O,w):
# import numpy as np
self.a=a
self.e=e
self.i=i*np.pi/180
self.O=O*np.pi/180
self.w=w*np.pi/180
def kep2cart(self):
cos=np.cos
sin=np.sin
pi=np.pi
theta=np.linspace(0,2*pi,500)
x=np.zeros(len(theta))
y=np.zeros(len(theta))
z=np.zeros(len(theta))
for j,t in enumerate(theta):
R=self.a * (1.-(self.e)**2)/(1+self.e * cos(t))
x[j]=R*(cos(self.O)*cos(self.w+t)-sin(self.O)*sin(self.w+t)*cos(self.i))
y[j]=R*(sin(self.O)*cos(self.w+t)+cos(self.O)*sin(self.w+t)*cos(self.i))
z[j]=R*sin(self.w+t)*sin(self.i)
return x,y,z
jup=orbels(5.2,0.048,1.3,100,14.8)
x5,y5,z5=jup.kep2cart()
plt.plot(x5[z5<0],y5[z5<0],'r--')
plt.plot(x5[z5>0],y5[z5>0],'r-',lw=2)
plt.plot(0,0,'ko',markersize=3)
plt.axis('equal')
plt.xlabel('X [AU]')
plt.ylabel('Y [AU]')
plt.xlim(-6,6)
plt.ylim(-6,6)
plt.legend()
plt.show()
Приведенный выше фрагмент дает следующий рисунок
Через середину эллипса проходит линия. Я предполагаю, что в той части, где эллипс нарисован непрерывной линией, точки данных перескакивают с одного конца фигуры на другой, заставляя matplotlib соединять точки. Один из способов решить эту проблему - вместо использования линий я мог бы использовать точки, но тогда мне нужно много точек для представления непрерывной части эллипса. Любая помощь будет очень признательна!