Lors de la création d'un graphique 3D avec Matplotlib, je souhaite définir la taille des axes du graphique et unifier le rapport des axes, mais une fonction comme plt.axes (). Set_aspect ('equal')
est un tracé 3D. N'existe pas dans, alors comment le résoudre.
(Utile pour les tracés orbitaux, etc.)
Par exemple, à propos de ce tracé
# plot in 3D of candidate branches
fig = plt.figure(figsize=(12,10))
plt.rcParams["font.size"] = 20
ax = fig.gca(projection='3d')
# mass
ax.plot_wireframe(xperilune_m2, yperilune_m2, zperilune_m2, color="k", label='m2', alpha=0.1)
# LPO trajectory
ax.plot(dynmatLPO["x_arr"]*Lstar, dynmatLPO["y_arr"]*Lstar, dynmatLPO["z_arr"]*Lstar, c='m', linewidth='1.5', label='Halo')
Supposons que vous souhaitiez solidifier la taille de l'arbre. Si vous souhaitez arrêter l'axe $ x $ de 320000 $ à 470000 $, l'axe $ y $ de -60000 $ à 60000 $ et l'axe $ z $ de -1000 $ à 1000 $, ont la plus grande plage de ces valeurs. La plage est calculée comme `` max = plage '', et la boîte est créée sur cette base.
# set array for max/min boxing
X = np.array([320000, 470000])
Y = np.array( [-60000, 60000])
Z = np.array([-1000, 1000])
# compute max required range
max_range = np.array([X.max()-X.min(), Y.max()-Y.min(), Z.max()-Z.min()]).max() / 2.0
# setup axis
mid_x = (X.max()+X.min()) * 0.5
mid_y = (Y.max()+Y.min()) * 0.5
mid_z = (Z.max()+Z.min()) * 0.5
ax.set_xlim(mid_x - max_range, mid_x + max_range)
ax.set_ylim(mid_y - max_range, mid_y + max_range)
ax.set_zlim(mid_z - max_range, mid_z + max_range)
ax.grid()
plt.title(f'Targeting from {num_branch} manifolds')
ax.legend(loc='best')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.show()
référence: https://matplotlib.org/3.2.1/api/_as_gen/mpl_toolkits.mplot3d.axes3d.Axes3D.html https://stackoverflow.com/questions/30196503/2d-plots-are-not-sitting-flush-against-3d-axis-walls-in-python-mplot3d/41779162#41779162
Recommended Posts