15

我正在尝试绘制一个 3D 曲面,该曲面构造为适合 python 中的一些 {x,y,z} 点——理想情况下类似于 MathematicaListSurfacePlot3D函数。到目前为止,我已经尝试过plot_surfaceplot_wireframe但我的观点无济于事。

只有坐标区使用plot_surface. plot_wireframe给出了一堆 squigglys,对象的形状模糊,但不是文档中显示的好排序: 在此处输入图像描述 与以下结果进行比较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: 在此处输入图像描述 和 using plot_wireframe: 在此处输入图像描述 和 using呈现的方式ListSurfacePlot3D在此处输入图像描述

4

1 回答 1

14

plot_surface期望二维数组形式的 X,Y,Z 值,如np.meshgrid. 当输入以这种方式规则网格化时,绘图函数隐含地知道曲面中的哪些顶点彼此相邻,因此应该与边连接。但是,在您的示例中,您正在处理它的一维坐标向量,因此绘图函数需要能够确定应该连接哪些顶点。

plot_trisurf函数确实通过进行 Delaunay 三角剖分来处理不规则间隔的点,以确定哪些点应该与边缘连接,以避免“薄三角形”:

在此处输入图像描述

于 2013-06-28T16:46:10.047 回答