3D-оси matplotlib с отметками, метками и LaTeX

Я запускаю этот образец сценария со следующими изменениями:

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. Как настроить отметку оси по своему выбору? То есть, как мне получить ось z только для меток 2, 0 и -2 и с размером шрифта, который я хочу? Я знаю, как это сделать в 2D, но не в 3D.

  2. Сценарий выше производит следующее:

введите описание изображения здесь

Почему искажается метка оси x, которую я хотел сделать с помощью этого скрипта, но не метка оси z (гамма)? Это не имеет смысла. Мне нужно, чтобы эта ось была обозначена греческой буквой. Как это исправить?


person Forklift17    schedule 08.06.2016    source источник


Ответы (2)


Как настроить отметку оси по своему выбору? То есть, как мне получить ось z только для меток 2, 0 и -2 и с размером шрифта, который я хочу? Я знаю, как это сделать в 2D, но не в 3D.

Вы должны изменить свойства zticks.

Почему искажается метка оси x, которую я хотел сделать с помощью этого скрипта, но не метка оси z (гамма)? Это не имеет смысла. Мне нужно, чтобы эта ось была обозначена греческой буквой. Как это исправить?

Вы должны отключить автоповорот для меток оси Z. Посмотрите на код ниже:

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()

введите описание изображения здесь

person Serenity    schedule 08.06.2016

Цикл for не нужен, чтобы изменить размер ваших тиков, вы можете использовать:

    ax.zaxis.set_tick_params(labelsize=10)
person Paul Snijder    schedule 13.06.2019