我正在尝试在3D matplotlib轴对象中移动刺。
这似乎是一个非常简单的问题,但我没有找到任何直接解决此问题的问题/答案。我在这个问题的底部列出了关于这个主题的研究清单。
我可以在matplotlib 2D图中设置刺的位置。以下代码:
import matplotlib.pyplot as plt, numpy as np
fig, axes = plt.subplots(1, 2)
r, theta = 1, np.linspace(0, 2*np.pi, 100)
x, y = r*np.cos(theta), r*np.sin(theta)
for ax in axes: # plot the same data on both axes
ax.plot(x, y)
ax.set_aspect("equal")
for spine in ax.spines.values(): # adjust spines on last active axis
spine.set_position(("data", 0))
然而,当我用3D轴尝试同样的事情时......
z = np.zeros(x.shape) # exciting stuff
fig = plt.figure()
for i in range(2): # create two 3D subplots
ax = plt.subplot(1,2,i+1, projection="3d", aspect="equal")
plt.plot(x, y, z)
for spine in ax.spines.values(): # adjust spines on last active axis
spine.set_position(("data", 0))
上面的代码告诉我:
即。没有效果,即使代码仍然运行。此外,对于3D轴,ax.spines
看起来像:
OrderedDict([('left', <matplotlib.spines.Spine at 0x120857b8>),
('right', <matplotlib.spines.Spine at 0xfd648d0>),
('bottom', <matplotlib.spines.Spine at 0xe89e4e0>),
('top', <matplotlib.spines.Spine at 0xe89eef0>)])
我不确定“左”,“右”,“下”,“顶”在3D轴的上下文中是指什么。我试过改变其他属性,如刺的颜色;也没有运气。如何掌握轴上的实际x,y,z棘?
研究:
mplot3d
文档根本没有提到刺。 ax.w_xaxis.set_pane_color()
设置窗格颜色,但没有类似的ax.w_zaxis.set_spine...
方法。 ax.w_zaxis.line.set_color()
设置主干颜色。我想过制作一个可怕的解决方法来手动设置ax.w_zaxis.line.set_data
,但它只有x和y数据;没有z!即使x轴和y轴也没有z数据。答案 0 :(得分:5)
目前似乎没有明显的方法可以做到这一点。未实现轴投影为3D时设置刺。但是,有一个小的黑客here。
ax.spines
设置用于2D渲染。在图的初始化中设置projection=3d
时,将忽略某些2D属性(如ax.spines
等)。这就是为什么在设置2D刺时没有得到任何响应的原因。
3D图形轴线(每个轴的粗黑线)位置由参数ax.xaxis._axinfo['juggled']
确定(对于y轴和z轴也类似)。这指定3D绘图边界框的六个外边界中的哪一个被绘制为粗黑线。
您可以通过覆盖juggled
值来移动x,y,z轴每个轴线的位置,该值指定哪些轴线是主轴线,如下面的x轴示例,
默认设置ax.xaxis._axinfo['juggled'] = (1,0,2)
新设置,ax.xaxis._axinfo['juggled'] = (2,0,1)
所有六个外边界的参数是,