更改 Axes3D 上轴的位置

问题描述 投票:0回答:2

我正在使用 mpl_toolkits 库中的 mplot3d。当在图上显示 3D 表面时,我意识到轴没有按照我希望的方式定位。

让我展示一下,我已在下面的屏幕截图中添加了每个轴的位置:

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

这是工作代码:

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')
语句,但不起作用。

python surface mplot3d matplotlib-3d
2个回答
3
投票

没有记录的方法,但通过 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 = 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()

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

您还可以查看相关问题通过对 _PLANES 属性进行低级黑客攻击来更改 3D 绘图的垂直 (z) 轴的位置。


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()
    
© www.soinside.com 2019 - 2024. All rights reserved.