2012-02-09 25 views
1

Iは、軸のラベルと目盛りの色を適切に2Dおよび3Dの両方で設定されている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) 

を設定しています。ただし、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 実装の醜さの一つにつまずいている

:ここでは、関連する部分です。私は、次の リリースのために、より多くのコントロールを用意したいと考えています。しかし、今は軸の背骨 をオフにする方法はありません(背骨として実装されていないためです)。あなたが本当に にソースコードを掘るしたい場合は、この答えはアドレッシングたが、あなたは でLine2Dの両方の呼び出しにmatplotlibの/ libに/ mpl_toolkits/axis3d.py

でinit3d()メソッドを色の引数を変更することができます別の懸念、それはaxis3d.pyの方向に私を送った。私は/usr/lib/pymodules/python2.7/mpl_toolkits/mplot3dでそれを見つけました。元のaxis3d.pyのバックアップを作成し、axis3d.pycを移動しました。

コードがかなり短く、かなりよく書かれているので、私が変更しなければならなかった2行を見つけるのに時間がかかりませんでした。

  • 各軸のエッジの色を変更する、Iは__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ファイルを再作成しませんでした。 Pythonコードをrootとして実行しないため、再作成しません。 Pythonが毎回.pyを再コンパイルするのに必要な余分なミリ秒は気にしません。

2

axis3dを変更する代わりに。py try this:ax.w_xaxis.line.set_color("red")

関連する問題