如何更改matplotlib 3D绘图的轴的颜色?

时间:2012-02-09 17:14:42

标签: matplotlib

我已经设置了

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 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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移开了。

由于代码很短且编写得很好,因此找到我必须更改的两行代码并不需要很长时间。

  • 要更改各个轴边缘的颜色,我修改了self.line=...中的__init__:只需将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所需的额外毫秒数。