密谋plot_trisurf不适用于范围数组

时间:2019-04-08 16:38:26

标签: python numpy matplotlib plotly

我基本上只是复制了Matplotlib网站上的示例代码,但是我用简单的arange数组替换了它们的半径和角度。

我尝试了不同的数组函数,但似乎什么也找不到。

from mpl_toolkits.mplot3d import Axes3D  

import matplotlib.pyplot as plt
import numpy as np
from Equation import Expression


x = np.arange(0,100,0.01)
y = np.arange(0,100,0.01)
x2 = np.append(0,x.flatten())
y2 = np.append(0,y.flatten())
z = x2 + y2
print(z)
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_trisurf(x, y, z, linewidth=0.2, antialiased=True)
plt.show()

我只是想制作一个z = x + y的图,但出现一个令人困惑的错误。 “ RuntimeError:qhull Delaunay三角剖分计算中的错误:单一输入数据(exitcode = 2);使用python verbose选项(-v)查看原始qhull错误。”

如果您需要更多信息,我们很乐意提供,但这就是整个代码。谢谢:)

编辑:我也尝试过不调用flatten(),但结果相同。

1 个答案:

答案 0 :(得分:0)

您得到的错误是因为您的z不是表面而是一条线。您需要至少使用3个点来定义一个平面。一种选择是使用np.meshgrid创建要绘制的表面,然后将所有内容展平以插入到函数中。尝试返回一些示例代码here。请注意,您可能还希望根据表面的细节来更改分辨率。

from mpl_toolkits.mplot3d import Axes3D  

import matplotlib.pyplot as plt
import numpy as np


x = np.arange(0,100,1)
y = np.arange(0,100,1)
x2 = np.append(0,x.flatten())
y2 = np.append(0,y.flatten())

x2,y2 = np.meshgrid(x2,y2) #This is what you were missing

z = x2 + y2

fig = plt.figure(figsize=(12,12))
ax = fig.gca(projection='3d')
ax.plot_trisurf(x2.flatten(), y2.flatten(), z.flatten(), linewidth=0.2, antialiased=True) #flatten all the arrays here


plt.show()

enter image description here