matplotlib 根据{x,y,z}-散射数据绘制3D表面

elcex8rz  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(98)

我试图绘制一个三维曲面,以适应Python中的一些{x,y,z}点--理想情况下,类似Mathematica ListSurfacePlot3D函数。到目前为止,我已经在我的点上尝试了plot_surfaceplot_wireframe,但没有效果。
只有轴使用plot_surface渲染。plot_wireframe给出了一堆波浪形的形状,模糊地呈现在对象的形状中,但不是文档中显示的那种漂亮的排序:x1c 0d1x与ListSurfacePlot3D的结果比较:

下面是一个最小的工作示例,使用了一个测试。csv文件我发布了here

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_wireframe

和使用ListSurfacePlot3D

xt0899hw

xt0899hw1#

plot_surface期望以2D数组形式的X、Y、Z值,正如np.meshgrid所返回的那样。当输入以这种方式规则网格化时,绘图函数隐式地知道曲面中的哪些顶点彼此相邻,因此应该与边连接。然而,在您的示例中,您将向其传递1D坐标向量,因此绘图函数需要能够确定应该连接哪些顶点。
plot_trisurf函数确实通过Delaunay三角剖分来处理不规则间隔的点,以确定哪些点应该以避免“薄三角形”的方式与边连接:

相关问题