我基本上只是复制了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(),但结果相同。
答案 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()