Установка цветов галочки 3D-графика matplotlib

Если у меня есть 3D-график matplotlib (объект Axes3D), как изменить цвет делений? Я понял, как изменить цвет линии оси, меток галочки и метки оси. Очевидное решение, использование ax.tick_params(axis='x', colors='red'), изменяет только метки галочек, а не сами метки галочек.

Вот код, который пытается изменить все оси на красный и получает все, кроме делений:

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import pyplot as plt

fig = plt.figure()
ax = Axes3D(fig)

ax.scatter((0, 0, 1), (0, 1, 0), (1, 0, 0))
ax.w_xaxis.line.set_color('red')
ax.w_yaxis.line.set_color('red')
ax.w_zaxis.line.set_color('red')
ax.w_zaxis.line.set_color('red')
ax.xaxis.label.set_color('red')
ax.yaxis.label.set_color('red')
ax.zaxis.label.set_color('red')
ax.tick_params(axis='x', colors='red')  # only affects
ax.tick_params(axis='y', colors='red')  # tick labels
ax.tick_params(axis='z', colors='red')  # not tick marks

fig.show()

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


person drhagen    schedule 30.11.2018    source источник
comment
Код работает для меня (все цвета галочек красные). Моя версия matplotlib 1.3.1.   -  person Banghua Zhao    schedule 30.11.2018
comment
@Banghua Я запустил это в matplotlib 2.0.0 и 3.0.2 и получил тот же результат. Должно быть, что-то давно сломалось.   -  person drhagen    schedule 30.11.2018


Ответы (2)


Как указано в страницу руководства о tick_params(axis='both', **kwargs) вы получаете ошибку:

Хотя эта функция в настоящее время реализована, основная часть объекта Axes3D может игнорировать некоторые из этих настроек. Будущие выпуски исправят это. Приоритет будет отдан тем, кто сообщает об ошибках.

Чтобы обойти эту проблему, используйте внутренний словарь _axinfo, как в этом примере:

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import pyplot as plt

fig = plt.figure()
ax = fig.gca(projection='3d')

ax.scatter((0, 0, 1), (0, 1, 0), (1, 0, 0))

ax.xaxis._axinfo['tick']['color']='r'
ax.yaxis._axinfo['tick']['color']='r'
ax.zaxis._axinfo['tick']['color']='r'
plt.show()

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

person Serenity    schedule 30.11.2018

Простой способ добиться ожидаемого результата заключается в следующем:

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import rcParams
from matplotlib import pyplot as plt

rcParams['xtick.color'] = 'red'
rcParams['ytick.color'] = 'red'
rcParams['axes.labelcolor'] = 'red'
rcParams['axes.edgecolor'] = 'red'

fig = plt.figure()
ax = Axes3D(fig)

ax.scatter((0, 0, 1), (0, 1, 0), (1, 0, 0))
plt.show()

Выходной дисплей:

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

person eapetcho    schedule 30.11.2018
comment
Этот код не позволяет отдельно менять цвет оси Z. - person Serenity; 03.12.2018