[英]Plot a 3D surface from {x,y,z}-scatter data in python
I'm trying to plot a 3D surface constructed to fit some {x,y,z} points in python -- ideally something like the Mathematica ListSurfacePlot3D
function. 我正在尝试绘制一个3D表面,以适应python中的某些{x,y,z}点 - 理想情况下就像Mathematica
ListSurfacePlot3D
函数。 Thus far I've tried plot_surface
and plot_wireframe
on my points to no avail. 到目前为止,我已经在我的观点上尝试了
plot_surface
和plot_wireframe
无济于事。
Only the axes render with plot_surface
. 只有轴使用
plot_surface
渲染。 plot_wireframe
gives a bunch of squigglys, vaguely in the shape of the object, but not the nice sort that is shown in the documentation: plot_wireframe
给出了一堆波浪形,模糊地描述了对象的形状,但不是文档中显示的漂亮排序: Compare to the result from
ListSurfacePlot3D
: 与
ListSurfacePlot3D
的结果进行比较:
Here is a minimal working example, using a test.csv file I posted here : 这是一个最小的工作示例,使用我在这里发布的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)
Then, either 然后,要么
ax.plot_surface(temp[0], temp[1], temp[2])
pyplot.show()
or 要么
ax.plot_wireframe(temp[0], temp[1], temp[2])
pyplot.show()
This is how it renders using plot_surface
: 这是使用
plot_surface
渲染的plot_surface
: and using
plot_wireframe
: 并使用
plot_wireframe
: and using
ListSurfacePlot3D
: 并使用
ListSurfacePlot3D
:
plot_surface
expects X,Y,Z values in the form of 2D arrays, as would be returned by np.meshgrid
. plot_surface
需要2D数组形式的X,Y,Z值,如np.meshgrid
返回的np.meshgrid
。 When the inputs are regularly gridded in this way, the plot function implicitly knows which vertices in the surface are adjacent to one another and therefore should be joined with edges. 当输入以这种方式定期网格化时,绘图函数隐式地知道表面中的哪些顶点彼此相邻,因此应该与边连接。 In your example, however, you're handing it 1D vectors of coordinates, so the plotting function would need to be able to figure out which vertices should be joined.
但是,在您的示例中,您正在处理1D坐标向量,因此绘图函数需要能够确定应该连接哪些顶点。
The plot_trisurf
function does handle irregularly spaced points by doing a Delaunay triangulation to determine which points should be joined with edges in such a way as to avoid 'thin triangles': plot_trisurf
函数通过执行Delaunay三角剖分来确定哪些点应该与边连接,以避免“薄三角形”,从而处理不规则间隔的点:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.