[英]Plot a 3D surface from {x,y,z}-scatter data in python
我正在尝试绘制一个3D表面,以适应python中的某些{x,y,z}点 - 理想情况下就像Mathematica ListSurfacePlot3D
函数。 到目前为止,我已经在我的观点上尝试了plot_surface
和plot_wireframe
无济于事。
只有轴使用plot_surface
渲染。 plot_wireframe
给出了一堆波浪形,模糊地描述了对象的形状,但不是文档中显示的漂亮排序: 与
ListSurfacePlot3D
的结果进行比较:
这是一个最小的工作示例,使用我在这里发布的test.csv文件:
import csv
from matplotlib import pyplot
import pylab
from mpl_toolkits.mplot3d import Axes3D
hFile = open("test.csv", 'r')
datfile = csv.reader(hFile)
dat = []
for row in datfile:
dat.append(map(float,row))
temp = zip(*(dat))
fig = pylab.figure(figsize=pyplot.figaspect(.96))
ax = Axes3D(fig)
然后,要么
ax.plot_surface(temp[0], temp[1], temp[2])
pyplot.show()
要么
ax.plot_wireframe(temp[0], temp[1], temp[2])
pyplot.show()
这是使用plot_surface
渲染的plot_surface
: 并使用
plot_wireframe
: 并使用
ListSurfacePlot3D
:
plot_surface
需要2D数组形式的X,Y,Z值,如np.meshgrid
返回的np.meshgrid
。 当输入以这种方式定期网格化时,绘图函数隐式地知道表面中的哪些顶点彼此相邻,因此应该与边连接。 但是,在您的示例中,您正在处理1D坐标向量,因此绘图函数需要能够确定应该连接哪些顶点。
plot_trisurf
函数通过执行Delaunay三角剖分来确定哪些点应该与边连接,以避免“薄三角形”,从而处理不规则间隔的点:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.