web-dev-qa-db-fra.com

matplotlib 3d axes ticks, labels et LaTeX

J'exécute this exemple de script, avec les modifications suivantes:

import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt

mpl.rcParams['legend.fontsize'] = 10

fig = plt.figure()
ax = fig.gca(projection='3d')
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
ax.plot(x, y, z, label='parametric curve')
ax.legend()

ax.set_xlabel('$X$', fontsize=20, rotation=150)
ax.set_ylabel('$Y$')
ax.set_zlabel(r'$\gamma$', fontsize=30, rotation=60)
ax.yaxis._axinfo['label']['space_factor'] = 3.0

plt.show()
  1. Comment ajuster les graduations de l'axe à celle de mon choix? C'est-à-dire, comment puis-je obtenir l'axe z pour ne nommer que 2, 0 et -2, et dans la taille de police que je veux? Je sais comment faire cela en 2D mais pas en 3D.

  2. Le script ci-dessus produit ce qui suit:

enter image description here

Pourquoi l'étiquette de l'axe x est-elle déformée, ce que je voulais faire avec ce script, mais pas l'étiquette de l'axe z (gamma)? Cela n'a pas de sens. J'ai besoin que cet axe soit étiqueté dans la lettre grecque. Comment puis-je réparer ça?

12
Forklift17

Comment ajuster les graduations de l'axe à celle de mon choix? C'est-à-dire, comment puis-je obtenir l'axe z pour ne nommer que 2, 0 et -2, et dans la taille de police que je veux? Je sais comment faire cela en 2D mais pas en 3D.

Vous devez modifier les propriétés de zticks.

Pourquoi l'étiquette de l'axe x est-elle déformée, ce que je voulais faire avec ce script, mais pas l'étiquette de l'axe z (gamma)? Cela n'a pas de sens. J'ai besoin que cet axe soit étiqueté dans la lettre grecque. Comment puis-je réparer ça?

Vous devez désactiver l'autorotation pour les étiquettes de l'axe z. Regardez le code ci-dessous:

import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt

mpl.rcParams['legend.fontsize'] = 10

fig = plt.figure()
ax = fig.gca(projection='3d')
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
ax.plot(x, y, z, label='parametric curve')
ax.legend()

ax.set_xlabel('$X$', fontsize=20)
ax.set_ylabel('$Y$')
ax.yaxis._axinfo['label']['space_factor'] = 3.0
# set z ticks and labels
ax.set_zticks([-2, 0, 2])
# change fontsize
for t in ax.zaxis.get_major_ticks(): t.label.set_fontsize(10)
# disable auto rotation
ax.zaxis.set_rotate_label(False) 
ax.set_zlabel('$\gamma$', fontsize=30, rotation = 0)
plt.show()

enter image description here

17
Serenity

La boucle for n'est pas nécessaire, pour changer la taille de vos ticks, vous pouvez utiliser:

    ax.zaxis.set_tick_params(labelsize=10)
0
Paul Snijder