2012-02-09 3 views
1

Я поставилКак изменить цвет осей графика matplotlib 3D?

import matplotlib as mpl 
AXES_COLOR = '#333333' 
mpl.rc('axes', edgecolor=AXES_COLOR, labelcolor=AXES_COLOR, grid=True) 
mpl.rc('xtick', color=AXES_COLOR) 
mpl.rc('ytick', color=AXES_COLOR) 
mpl.rc('grid', color=AXES_COLOR) 

цвета осей этикетки и клещи правильно установлены как в 2D так и в 3D. Однако edgecolor не относится к трехмерным осям, и они остаются черными. Аналогично, на сетку не влияет.

Я думаю, что понял, как получить доступ к отдельным осям 3D-участка:

import matplotlib.pyplot as plt 
import mpl_toolkits.mplot3d # Needed for 3d projection. 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
ax.w_zaxis # <- the z axis 

documentation упоминает свойство, которое мы можем использовать, пока разработчики не закончили рефакторинга свой 3D-код:

import pprint 
pprint.pprint(ax.w_xaxis._AXINFO) 

{'x': {'color': (0.95, 0.95, 0.95, 0.5), 
     'i': 0, 
     'juggled': (1, 0, 2), 
     'tickdir': 1}, 
'y': {'color': (0.9, 0.9, 0.9, 0.5), 
     'i': 1, 
     'juggled': (0, 1, 2), 
     'tickdir': 0}, 
'z': {'color': (0.925, 0.925, 0.925, 0.5), 
     'i': 2, 
     'juggled': (0, 2, 1), 
     'tickdir': 0}} 

Однако параметр цвета изменяет цвет фона плоскостей осей (между проводными сетками), а не цвет краев этих плоскостей.

Я копаю слишком глубоко?

ответ

2

Оказывается, это невозможно, поскольку эти значения жестко закодированы. This archived email from the matplotlib-users mailing list помог мне. Вот соответствующая часть:

К сожалению, вы наткнулись на одну из уродства mplot3d реализации. Я надеюсь, что у вас будет больше возможностей для следующего выпуска . Но прямо сейчас, нет способа отключить оси spines (потому что они не реализованы как шипы). Если вы действительно хотите, чтобы копаться в исходный код, вы можете изменить цвет аргумент вызова Line2D в метод init3d() в Matplotlib/Библиотека/mpl_toolkits/axis3d.py

Хотя этот ответ был адресация другой вопрос, он отправил меня в направлении axis3d.py. Я нашел его в /usr/lib/pymodules/python2.7/mpl_toolkits/mplot3d. Я сделал резервную копию оригинала axis3d.py, и я переместил axis3d.pyc.

Поскольку код довольно короткий и достаточно хорошо написанный, не потребовалось много времени, чтобы найти две строки, которые мне пришлось изменить.

  • Чтобы изменить цвет краев отдельных осей, я изменил self.line=... в __init__: просто заменить color=(0, 0, 0, 1) на color=(1, 0, 0, 1) для ужасно кричащий красный. Компоненты кортежа: красный, зеленый, синий, альфа, все поплавки от 0 до 1.
  • Чтобы изменить цвет сетки, я изменил метод draw. Я заменил цвет self.gridlines.set_color([(0.9,0.9,0.9,1)] * len(lines)) чем-то моим выбором.

И все, это просто работает. Не самый удобный, но это не больше, чем редактирование файла конфигурации rc.

Я не воссоздал файл .pyc. Он не воссоздает себя, потому что я не запускаю свой код python как root. Я не возражаю против дополнительных миллисекунд, которые python должен перекомпилировать .py каждый раз.

2

Вместо изменения оси3d.py попробуйте следующее: ax.w_xaxis.line.set_color("red")

Смежные вопросы