一种可能的方法是使用
plot_surface。适应给出的解决方案在这篇博客文章则有
import matplotlib.pyplot as pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3Dfig = plt.figure()ax = fig.add_subplot(111, projection='3d')# Scatter graphN = 100X = np.random.uniform(-1, 1, N)Y = np.random.uniform(-1, 1, N)Z = np.random.uniform(-2, 2, N)ax.scatter(X, Y, Z)# Cylinderx=np.linspace(-1, 1, 100)z=np.linspace(-2, 2, 100)Xc, Zc=np.meshgrid(x, z)Yc = np.sqrt(1-Xc**2)# Draw parametersrstride = 20cstride = 10ax.plot_surface(Xc, Yc, Zc, alpha=0.2, rstride=rstride, cstride=cstride)ax.plot_surface(Xc, -Yc, Zc, alpha=0.2, rstride=rstride, cstride=cstride)ax.set_xlabel("X")ax.set_ylabel("Y")ax.set_zlabel("Z")plt.show()我添加了一些最小的表面配置,可以通过查阅docs来实现更好的配置。



