在Axes3D中更改轴的位置

5

我正在使用mpl_toolkits库中的mplot3d。在显示3D表面时,我意识到轴线的位置并不符合我的期望。

让我来展示一下,我已经在下面的截图中标记了每个轴线的位置:

enter image description here

有没有办法改变轴的位置以达到这个结果:

enter image description here

这里是可用的代码:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

ax = Axes3D(plt.figure())
def f(x,y) :
    return -x**2 - y**2

X = np.arange(-1, 1, 0.02)
Y = np.arange(-1, 1, 0.02)
X, Y = np.meshgrid(X, Y)
Z = f(X, Y)
ax.plot_surface(X, Y, Z, alpha=0.5)

# Hide axes ticks
ax.set_xticks([-1,1])
ax.set_yticks([-1,1])
ax.set_zticks([-2,0])

ax.set_yticklabels([-1,1],rotation=-15, va='center', ha='right')

plt.show()

我尝试使用xaxis.set_ticks_position('left')语句,但它不起作用。

3个回答

3
没有正式的方法,但是通过一些来自https://dev59.com/DWUp5IYBdhLWcg3wzp1k#15048653 的技巧,你可以实现。
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = ax = fig.add_subplot(111, projection='3d')
ax.view_init(30, 30)


def f(x,y) :
    return -x**2 - y**2

X = np.arange(-1, 1, 0.02)
Y = np.arange(-1, 1, 0.02)
X, Y = np.meshgrid(X, Y)
Z = f(X, Y)
ax.plot_surface(X, Y, Z, alpha=0.5)

# Hide axes ticks
ax.set_xticks([-1,1])
ax.set_yticks([-1,1])
ax.set_zticks([-2,0])

ax.xaxis._axinfo['juggled'] = (0,0,0)
ax.yaxis._axinfo['juggled'] = (1,1,1)
ax.zaxis._axinfo['juggled'] = (2,2,2)

plt.show()

这里输入图片描述

我不知道三元组中第三个数字的含义。如果将其设为零,则图形不会发生变化。因此,应该查看代码以进行进一步的调整。

您还可以查看相关问题(更改3D绘图的垂直(z)轴位置(Matplotlib)?),其中涉及到对_PLANES属性的低级操作。


对于 zaxis,元组的第一个数字改变了轴的位置(右、左、中)。 - Guimoute

0
也许可以考虑用箭袋来替代轴线?
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = ax = fig.add_subplot(projection='3d')

def f(x,y) :
    return -x**2 - y**2

X = np.arange(-1, 1, 0.02)
Y = np.arange(-1, 1, 0.02)
X, Y = np.meshgrid(X, Y)
Z = f(X, Y)
ax.plot_surface(X, Y, Z, alpha=0.5)


#make axes invisible

ax.set_xticks([])
ax.set_yticks([])
ax.set_zticks([])
for axis in [ax.xaxis, ax.yaxis, ax.zaxis]:
    axis.line.set_linewidth(0)

#put quiver instead

ax.quiver(-2,-2,-2,1,0,0,length=2,color="k",arrow_length_ratio=.1)
ax.quiver(-2,-2,-2,0,1,0,length=2,color="k",arrow_length_ratio=.1)
ax.quiver(-2,-2,-2,0,0,1,length=2,color="k",arrow_length_ratio=.1)
ax.set_xlim(-1,1)
ax.set_ylim(-1,1)
ax.set_zlim(-1,1)

plt.show()

-1

有些变动,下面的代码不起作用了,所有的轴都隐藏了...

ax.xaxis._axinfo['juggled'] = (0,0,0)
ax.yaxis._axinfo['juggled'] = (1,1,1)
ax.zaxis._axinfo['juggled'] = (2,2,2)

我建议使用plot函数创建一个图表。

1
它与现有答案有何不同? - mins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接