2012-02-09 282 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 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 实现的一个丑陋之处。我希望有更多的控制可用于下一个 版本。但现在,没有办法关闭轴棘 (因为它们没有实现为棘)。如果你真的想挖成 的源代码,你可以改变颜色参数来调用的Line2D在 在matplotlib的init3d()方法,/ lib中/ mpl_toolkits/axis3d.py

虽然这个答案正在解决另一个担心,它把我送往axis3d.py的方向。我在/usr/lib/pymodules/python2.7/mpl_toolkits/mplot3d找到它。我做了原始axis3d.py的备份,并将axis3d.pyc移开了。

由于代码非常简短且编写得相当好,因此找到必须更改的两条线并不需要很长时间。

  • 要改变各轴的边​​缘的颜色,我在__init__修改self.line=...:只是一个可怕的华丽的红色取代color=(0, 0, 0, 1)通过color=(1, 0, 0, 1)。元组的元素是红色,绿色,蓝色,alpha,所有浮点数都是从0到1.
  • 要更改网格的颜色,我修改了draw方法。我用我选择的东西替换了颜色self.gridlines.set_color([(0.9,0.9,0.9,1)] * len(lines))

就是这样,它只是工作。不是最方便的,但它不是编辑rc配置文件的更多工作。

我没有重新创建.pyc文件。它不会重新创建,因为我不以root身份运行我的Python代码。我不介意python每次需要重新编译.py的额外毫秒数。

2

而不是改变axis3d。py试试这个:ax.w_xaxis.line.set_color("red")