如何更改matplotlib 3D打印轴的颜色?

如何更改matplotlib 3D打印轴的颜色?,matplotlib,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) 轴标签和记号的颜色在二维和三维中都已正确设

我已经准备好了

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绘图的各个轴:

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
但是,“颜色”参数会更改轴平面背景的颜色(在栅格的连线之间),而不是这些平面边的颜色


我挖得太深了吗?

结果是不可能的,因为这些值是硬编码的。帮助了我。以下是相关部分:

不幸的是,您偶然发现了mplot3d的一个丑陋之处 实施我希望下一个赛季能有更多的控制权 释放。但是现在,没有办法关闭轴脊椎 (因为它们不是作为脊椎实现的)。如果你真的想深入研究 在源代码中,您可以将color参数更改为Line2D调用 matplotlib/lib/mpl_toolkit/axis3d.py中的init3d()方法

虽然这个答案解决了另一个问题,但它让我转向了
axis3d.py
。我在
/usr/lib/pymodules/python2.7/mpl_工具包/mplot3d
中找到了它。我备份了原始的
axis3d.py
,并将
axis3d.pyc
移走

因为代码很短,写得也很好,所以很快就找到了我必须更改的两行代码

  • 为了更改各个轴边缘的颜色,我在
    \uuuu init\uuuu
    中修改了
    self.line=…
    :只需将
    color=(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

不要更改axis3d.py,试试这个:
ax.w\u xaxis.line.set\u color(“红色”)

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}}