У меня есть трехмерная поверхность plot_wireframe и контурный график на плоскости xy (добавлено с использованием смещения). Я хочу нанести отдельные точки на контурный график, но когда я использую plt.scatter и устанавливаю координату z на смещение, точки (a.) 3D и (b.) Исчезают, когда я делаю их положение совпадающим с плоскостью xy. содержащий контурный график.
Есть ли способ решить эту проблему? Я приложил автономный (но немного извините) код с графиками внизу.
Спасибо!
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import numpy as np
#define function to calcualte potential.
def U(X, Y):
U = np.zeros((len(X), len(Y)))
for i in range(0, len(X)):
for j in range (0, len(Y)):
p = np.array([X[i], Y[j], 0])
#gravitational potentials
R_s = np.linalg.norm(p - r_s)
R_p = np.linalg.norm(p - r_p)
U_grav_s = -mu_s/R_s
U_grav_p = -mu_p/R_p
#centrifugal potential
oa = np.cross(Omega, p)
U_c = - 0.5 * np.dot(oa, oa)
U[i,j] = U_c + U_grav_p + U_grav_s
return(U)
def U_single(X, Y):
p = np.array([X, Y, 0])
#gravitational potentials
R_s = np.linalg.norm(p - r_s)
R_p = np.linalg.norm(p - r_p)
U_grav_s = -mu_s/R_s
U_grav_p = -mu_p/R_p
#centrifugal potential
oa = np.cross(Omega, p)
U_c = - 0.5 * np.dot(oa, oa)
U_single = U_c + U_grav_p + U_grav_s
return(U_single)
#Define unscaled variables for this plot.
G = 4.0*np.pi**2
m_s = 1 #mass of Sun
m_p = 0.1 #mass of plant
mu_s = G*m_s
mu_p = G*m_p
alpha = m_p/(m_s+m_p)
beta = m_s/(m_s+m_p)
r_s = np.array([-alpha, 0, 0]) #position of Sun
r_p = np.array([beta, 0, 0]) #position of planet
R = alpha + beta
omega = np.sqrt((mu_s+mu_p)/R**3) #define angular velocity of rotating frame
Omega = np.array([0, 0, omega]) #define vector quantity
#Generate data
X = np.arange( -1.5*R, 1.5*R, 0.01)
Y = np.arange(-1.5*R, 1.5*R, 0.01)
U_1 = U(X, Y)
U_2 = U(X, Y)
U_1[U_1<-150] = np.nan
U_2[U_2 < -250] = np.nan
X, Y = np.meshgrid(X, Y)
#plot potential surface
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_wireframe(X, Y, U_1, color = 'k', linewidth = 0.05,
rcount = 500, ccount = 500)
ax.view_init(elev= 20., azim=-10)
ax.xaxis.pane.fill = False
ax.yaxis.pane.fill = False
ax.zaxis.pane.fill = False
ax.grid(False)
ax.set_xticklabels([])
ax.set_yticklabels([])
ax.set_zticklabels([])
for line in ax.xaxis.get_ticklines():
line.set_visible(False)
for line in ax.yaxis.get_ticklines():
line.set_visible(False)
for line in ax.zaxis.get_ticklines():
line.set_visible(False)
ax.text2D(0.5, 0, r"Combined Potential, $U_{tot.}$",
horizontalalignment='center', verticalalignment='bottom',
transform=ax.transAxes)
ax.set_zlim(-250,0)
#plot contour map
levels = np.arange(-255,0,2.5)
CS = ax.contour(X, Y, U_2, levels = levels, linewidths = 0.2, colors = 'k', offset = -250)
cntr1 = ax.contourf(X, Y, U_2, levels=levels, cmap = plt.get_cmap('jet'), offset = -250)
#Example point to plot:
L1 = np.array([0.0, R*(1-((m_p)/(3*(m_s + m_p))**(1/3))-0.315), -250])
ax.scatter(L1[0], L1[1], L1[2])
plt.show()