2012-02-09 8 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 축에 적용되지 않으며 검정색으로 유지됩니다. 마찬가지로 그리드는 영향을받지 않습니다.

나는 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}} 
:

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 코드를 리팩토링 사용할 수있는 속성을 언급을

그러나 색상 매개 변수는이 평면의 가장자리 색상이 아닌 축 평면의 배경 색상 (격자 유선 사이)을 변경합니다.

너무 깊게 파고 있습니까?

답변

2

이 값은 하드 코딩되어 있으므로 불가능합니다. This archived email from the matplotlib-users mailing list 나를 도왔습니다. 불행하게도, 당신은 mplot3d 구현의 추함 중 하나 우연히 한

: 여기에 관련된 부분입니다. 다음 번 릴리스에 대해 더 많은 제어 기능을 사용할 수 있기를 기대합니다. 그러나 지금은 축 꼬리 모양을 없애는 방법이 없습니다. (꼬리 모양으로 구현되지 않았기 때문에) 당신이 정말로 에 소스 코드를 파고 싶은 경우에, 당신은 에/lib 디렉토리/mpl_toolkits/axis3d.py

것은이 대답은 해결되었지만를하기 matplotlib에서 init3d() 메소드를 Line2D를 호출에 색 인수를 변경할 수 있습니다 또 다른 관심사는 나를 axis3d.py의 방향으로 보냈습니다. /usr/lib/pymodules/python2.7/mpl_toolkits/mplot3d에서 찾았습니다. 나는 원래 axis3d.py의 백업을 만들었고 axis3d.pyc을 옮겼습니다.

코드가 꽤 짧고 잘 작성되었으므로 변경해야하는 두 줄을 찾으려면 시간이 오래 걸리지 않았습니다. 개별 축의 가장자리의 색을 변경하려면

  • , 나는 __init__self.line=... 수정 : 그냥 끔찍하게 화려한 빨간색에 대한 color=(1, 0, 0, 1)에 의해 color=(0, 0, 0, 1)를 교체합니다. 터플의 구성 요소는 빨간색, 녹색, 파란색, 알파이며 모두 0에서 1까지 부동입니다.
  • 그리드의 색을 변경하려면 draw 메서드를 수정했습니다. 나는 색깔을 self.gridlines.set_color([(0.9,0.9,0.9,1)] * len(lines)) 대체하여 내 선택의 무언가로.

그리고 그게 효과가 있습니다. 가장 편리한 것은 아니지만 rc 구성 파일을 편집하는 것보다 더 효과가 없습니다.

.pyc 파일을 다시 만들지 않았습니다. 파이썬 코드를 루트 권한으로 실행하지 않기 때문에 자체를 다시 작성하지 않습니다. 파이썬이 매번 .py을 다시 컴파일해야한다는 추가의 밀리 초는 신경 쓰지 않습니다.

2

대신 axis3d를 변경하십시오.py try this : ax.w_xaxis.line.set_color("red")

관련 문제