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

gnuplot: Contour plot of a scattered data set

我有一个7列800万多行的散乱数据文件(data file)。我想绘制此数据的轮廓。我想绘制的列是第一列、第二列和最后一列(第七列),给出 2d 和 3d 图如下:

前视图:

边缘视图:

简单的 3d:

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

是否可以使用 gnuplot set contour basecntrparam levels 来做到这一点?

您需要一些平滑(或插值算法)。 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

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

现在您可以使用等高线进行上述数据处理了:

set view map
unset surface
set contour
splot "fort.12" u 1:2:7 w l

最后,请注意,如果您要重用插值数据,您可以将其绘制到 table 和 set dgrid3d ...; set table "somefile"; plot ...; unset table; unset dgrid3d; plot "somefile" ...(即绘制到文件),这样 gnuplot 就不会每次都需要插值