matplotlib 使用Axes3D.plot_wireframe和Axes3D.scatter绘图:线框隐藏的散点

wvmv3b1j  于 2023-11-22  发布在  其他
关注(0)|答案(2)|浏览(117)

我用Axes3d.plot_wireframe画了一个离散的圆盘表面,在同一张图上,我使用Axes3d.scatter(附图)标记了一个对应于磁盘中心的点。我的问题是,该点仅在光盘在配置文件中可见。我希望它无论视图都是可见的。我还加入了我的脚本的一部分(如果它没有按应有的方式出现,请抱歉)。
我尝试改变脚本中的图的顺序,我尝试在两个图中添加'zorder'参数,我还尝试改变散点图中的标记大小,但它不起作用。

import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import pylab as plt
import numpy as np

# data to build the disc
r = np.linspace(0, 5e-3, 30)
psi = np.linspace(0, 2*np.pi, 30)
n = np.array([0.70710678, 0, 0.70710678])
e2 = np.array([0.70710678, 0, -0.70710678])
e3 = np.array([0, 1, 0])
Oc = np.array([0, 0, 0])
R, PSI = np.meshgrid(r, psi)
OpP = np.zeros((len(r),len(psi),3), dtype=float)
OpP[:,:,0] = np.zeros((len(r),len(psi)), dtype=float)
OpP[:,:,1] = R*np.cos(PSI)  
OpP[:,:,2] = R*np.sin(PSI)  
Mrot = np.zeros((3,3), dtype=float)
Mrot[0,:] = n
Mrot[1,:] = e2
Mrot[2,:] = e3
Ocx = Oc[0]; Ocy = Oc[1]; Ocz = Oc[2]
xp = Ocx + np.dot(OpP, Mrot)[:,:,0]
yp = Ocy + np.dot(OpP, Mrot)[:,:,1]
zp = Ocz + np.dot(OpP, Mrot)[:,:,2]

# Plotting
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_wireframe(zp,yp,xp, label='piston')
ax.scatter(Ocz, Ocy, Ocx, zdir='z', s=40, color='red', label='Oc')
plt.gca().invert_yaxis()
plt.legend()
plt.show()

字符串
光盘的剖面图:

定向盘:

yebdmbv4

yebdmbv41#

可以设置plot的一些参数值以获得更好的绘图效果。请尝试将相关代码行替换为以下内容:

ax.plot_wireframe(zp,yp,xp, label='piston', \
            linewidth=0.5, \
            alpha=0.7)
ax.scatter(Ocz, Ocy, Ocx, zdir='z', \
            s=80, \
            color='red', label='Oc')

字符串


的数据

ztyzrc3y

ztyzrc3y2#

引用Whitty's answer,实际上可以在指定computed_zorder=False时使用zorder

ax = plt.axes(projection='3d',computed_zorder=False)
ax.plot_wireframe(zp, yp, xp, zorder=1, ...)
ax.scatter(Ocz, Ocy, Ocx, zorder=2, ...)

字符串

相关问题