我正在尝试在 python 中创建一座山的表面图,其中我有一些 xyz 数据。最终结果应该看起来像 那样。该文件的格式如下:
616000.0 90500.0 3096.712
616000.0 90525.0 3123.415
616000.0 90550.0 3158.902
616000.0 90575.0 3182.109
616000.0 90600.0 3192.991
616025.0 90500.0 3082.684
616025.0 90525.0 3116.597
616025.0 90550.0 3149.812
616025.0 90575.0 3177.607
616025.0 90600.0 3191.986
等等。第一列代表 x
坐标,中间一列 y
坐标,以及 z
属于xy坐标的高度。
I read in the data using pandas
and then convert the columns to individual x
, y
, z
NumPy
一维数组。到目前为止,我设法用 for
循环迭代每个 1D 数组的每个索引创建了一个简单的 3D 散点图,但这需要很长时间并且看起来效率很低。
我尝试使用 scipy.interpolate.griddata
和 plt.plot_surface
--- 数据,但对于 z
数据我总是不能得到数据数组中的错误弄清楚为什么或如何它应该是二维数据。我假设如果我有 xyz 数据,应该有一种方法可以简单地从中创建一个表面。有简单的方法吗?
原文由 sfluck 发布,翻译遵循 CC BY-SA 4.0 许可协议
Using functions
plot_trisurf
andscatter
frommatplotlib
, givenX Y Z
data can be plotted similar to given plot .这里,
X Y Z
作为参数提供给上述脚本的数据plot_trisurf
中,用于控制外观的参数。例如alpha
用于控制表面的不透明度scatter
,c
参数指定绘制在表面上的点的颜色对于给定的数据文件,生成以下图
注意: 在这里,地形是由一组给定的 3D 点的三角测量形成的。因此,图中沿曲面的等高线未与 X 轴和 Y 轴对齐