在 python 中创建一个平面

计算科学 Python
2021-11-26 02:46:04

我正在尝试从 python 中的参考表面创建粒子分布图。我计划在 python 中获得一个发行版,然后用 tikz 美化它。我试过这个:

xs = np.linspace(-1, 1, 10)
ys = np.linspace(-1, 1, 10)
X, Y = np.meshgrid(xs, ys)

Z = X
for i in range (0, 10):
  for j in range (0, 10):
    Z[i][j] = 0

xs = randomrange(10, -1, 1)
ys = randomrange(10, -1, 1)
zs = randomrange(10, 0, 10)
ax.plot_surface(X, Y, Z)
ax.scatter(xs, ys, zs)

但是,我收到一条带有错误消息的行:

/usr/lib/python3.2/site-packages/mpl_toolkits/mplot3d/axes3d.py:1478:RuntimeWarning:在true_divide中遇到nvalid value for n in normals])

我认为这是由于除以 0(试图为表面着色)。

那么如何生成参考表面呢?

编辑:

我尝试了 MRocklin 的解决方案并更换了

Z = X 

Z = np.zeros_like(X)

现在我根本没有任何表面......

1个回答

在行

Z = X

您只是将 X 重命名为 Z,而不是复制。然后,您的代码会将 X 的所有元素清零。您可能想尝试将其替换为以下内容:

Z = X.copy()

实际上,您的代码的第一位可以替换为

X, Y = np.mgrid[-1:1:10j, -1:1:10j]
Z = np.zeros_like(X)

这是使用 mpl 工具包 mplot3d 生成平面的完整 Python 代码,该工具包运行来自EPD学术发行版 7.1-2的 python 2.7.2

$ ipython --pylab
In [1]: from mpl_toolkits import mplot3d

In [2]: f = figure()

In [3]: ax = mplot3d.Axes3D(f)

In [4]: X, Y = mgrid[-1:1:10j, -1:1:10j]

In [5]: Z = zeros_like(X)

In [6]: ax.plot_surface(X,Y,Z)
/home/mrocklin/Software/epd/lib/python2.7/site-packages/mpl_toolkits/mplot3d/axes3d.py:777: RuntimeWarning: invalid value encountered in divide
  n = n / proj3d.mod(n)
Out[6]: <mpl_toolkits.mplot3d.art3d.Poly3DCollection at 0xaa13d2c>

In [7]: show()

一个简单的平面