gnuplot:分散数据集的等高线图

Pan*_*oro 5 plot gnuplot

我有一个由 7 列和超过 800 万行组成的分散数据文件(数据文件)。我想绘制此数据的轮廓。我想绘制的列是第一个,第二个和最后一个(第七个),给出一个 2d 和 3d 绘图如下:

正视图:

正视图

边缘视图:

视野边缘

和简单的 3d:

3d 视图

从第二个图中可以看出,第一件事是这些点聚集在 2d 区域的特定位置,在 3d 图中可以看到最小值的同一区域。但是,其次,这些点随机分布在平面(第二个图)中,我想我不能使用矩阵表示来绘制 iso-z 的轮廓。

是否可以使用 gnuplotset contour basecntrparam levels做到这一点?

Mig*_*uel 6

您需要一些平滑(或插值算法)。该set dgrid3d选项可帮助您创建规则网格并插入分散数据集中的值。有多种方法可以插入数据,您可以查看help set dgrid3d更多信息。我使用了高斯拖尾,您的数据看起来不错:

set dgrid3d 50,50 gauss 10e-6,10e-6
set logscale z
splot "fort.12" u 1:2:7 w l
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

注意 gnuplot 需要一些时间来生成新的 50x50 网格(如果你增加网格点的数量,计算时间会相应增加),在低分辨率下做一些测试,如果你想要非常精细的细节,那么你可以使用更精细的网格为“生产数字”。您可以使用高斯内核中的距离缩放来改变图形的外观,但是对于您的数据集,如果您的数据集比我上面的示例小得多,您的表面开始看起来很嘈杂。

现在您可以使用轮廓进行上述数据处理:

set view map
unset surface
set contour
splot "fort.12" u 1:2:7 w l
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

最后,请注意,如果您要重复使用插值数据,您可以将其绘制到表格中set dgrid3d ...; set table "somefile"; plot ...; unset table; unset dgrid3d; plot "somefile" ...(即绘制到文件),以便 gnuplot 不需要每次都进行插值。