更改Axes3D中轴的位置

时间:2018-05-23 16:13:42

标签: python mplot3d

我正在使用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')语句,但它不起作用。

1 个答案:

答案 0 :(得分:0)

没有记录的方法,但是可以使用https://stackoverflow.com/a/15048653/1149007的一些黑客思想。

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()

enter image description here

我不知道第三个数字的含义。如果设置为零,则图中没有任何变化。因此,应查看代码以进行进一步调整。

您还可以查看有关_PLANES属性受到低级黑客攻击的相关问题Changing position of vertical (z) axis of 3D plot (Matplotlib)?