擅长:python、mysql、java
<p>一种可能的方法是使用<code>plot_surface</code>。调整给定的解决方案<a href="http://msemac.redwoods.edu/~darnold/html/cylinders.html" rel="noreferrer">in this blog post</a>然后</p>
<pre><code>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')
# Scatter graph
N = 100
X = 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)
# Cylinder
x=np.linspace(-1, 1, 100)
z=np.linspace(-2, 2, 100)
Xc, Zc=np.meshgrid(x, z)
Yc = np.sqrt(1-Xc**2)
# Draw parameters
rstride = 20
cstride = 10
ax.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()
</code></pre>
<p><img src="https://i.stack.imgur.com/V1MTF.png" alt="enter image description here"/></p>
<p>我添加了一些曲面的最小配置,通过查阅<a href="http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#scatter-plots" rel="noreferrer">docs</a>可以实现更好的配置。</p>