很遗憾,这似乎没有暴露出来。查看源代码,关键的内部变量是调用_AXINFO
,我们可以通过仔细的子类化来覆盖它。
![enter image description here](https://istack.dev59.com/Mv096.webp)
在创建图形后添加此代码,并使用dict custom_AXINFO
进行样式设置:
from mpl_toolkits.mplot3d import Axes3D
import mpl_toolkits.mplot3d.axis3d as axis3d
custom_AXINFO = {
'x': {'i': 0, 'tickdir': 1, 'juggled': (1, 0, 2),
'color': (0.00, 0.00, 0.25, .75)},
'y': {'i': 1, 'tickdir': 0, 'juggled': (0, 1, 2),
'color': (0.20, 0.90, 0.90, 0.25)},
'z': {'i': 2, 'tickdir': 0, 'juggled': (0, 2, 1),
'color': (0.925, 0.125, 0.90, 0.25)},}
class custom_XAxis(axis3d.Axis):
_AXINFO = custom_AXINFO
class custom_YAxis(axis3d.Axis):
_AXINFO = custom_AXINFO
class custom_ZAxis(axis3d.Axis):
_AXINFO = custom_AXINFO
class custom_Axes3D(Axes3D):
def _init_axis(self):
'''Init 3D axes; overrides creation of regular X/Y axes'''
self.w_xaxis = custom_XAxis('x', self.xy_viewLim.intervalx,
self.xy_dataLim.intervalx, self)
self.xaxis = self.w_xaxis
self.w_yaxis = custom_YAxis('y', self.xy_viewLim.intervaly,
self.xy_dataLim.intervaly, self)
self.yaxis = self.w_yaxis
self.w_zaxis = custom_ZAxis('z', self.zz_viewLim.intervalx,
self.zz_dataLim.intervalx, self)
self.zaxis = self.w_zaxis
for ax in self.xaxis, self.yaxis, self.zaxis:
ax.init3d()
points = (5*np.random.randn(3, 50)+np.tile(np.arange(1,51), (3, 1))).transpose()
fig = plt.figure(figsize = (10,10))
ax = custom_Axes3D(fig)
这是最糟糕的猴子补丁,不应依赖于后续版本的工作。
修复面颜色比网格线更容易,因为这需要覆盖其中一个__init__
方法,虽然可以通过更多的工作来完成。
似乎很容易将其公开给最终用户,因此我可以想象这可能会在以后的版本中修复。