我试图使用matplotlib在python中绘制一个完美光滑的球体。我一直在使用以下代码:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
fig = plt.figure(1)
ax = fig.add_subplot(111, projection='3d')
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = np.outer(np.cos(u), np.sin(v))
y = np.outer(np.sin(u), np.sin(v))
z = np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z, linewidth=0.0)
plt.show()
我得到的图附在下面:
生成的图形由其上的矩形曲面片组成。有没有可能使边界平滑,或者使其无法区分,并使其成为一个完美的光滑球体?
1条答案
按热度按时间zzlelutf1#
Matplotlib通过将它们分解成颜色相等的小子多边形来绘制3d表面,正如文档中所解释的那样,因此您的结果并不令人惊讶。为了获得更平滑的表面,您必须提供更多的数据点。然而,有一个小的扭曲,那就是
plot_surface()
可能不会使用您提供的所有数据。这是用cstride
和rstride
关键字控制的。默认值是如何计算的,我不太清楚,但下面是一个小例子来演示效果:生成的图形如下所示:
正如您所看到的,图的结果对数据的密度和
stride
关键字都很敏感。不过,请注意您提供的数据量-plot_surface()
可能会占用相当多的时间来提供结果。希望这能帮上忙。