1

我正在 3d 绘制一个带有一些值的矩阵,我需要在图中添加等高线,是否有一个简单的 gnuplot 命令来执行此操作?

我尝试了命令:“设置轮廓基础”但只出现了 1 行,我认为应该是多行。见matlab图片

当我在 gnuplot 中绘制它时,我只在左上角得到 1 条等高线。但其他一切都是正确的。

我的目标是让它在 matlab 中看起来像这个Matlabplot

我还找到了这个例子:见评论中的链接(没有足够的代表),但我不明白我应该把 test.txt 中的数据值放在哪里

测试.txt

测试.txt

gnuplot 命令

set view map
set yrange [0:30]
set xrange [0:30]
set dgrid3d 100,100,4
set contour base
splot 'test.txt' u 1:2:3 w pm3d
4

1 回答 1

3

您缺少的是告诉 gnuplot 将轮廓放在哪里。这是通过set cntrparam levels incr -0.3,0.1,0.5命令完成的,这意味着:从 -0.3 开始,每隔 o.1 到 0.5 跟踪一个轮廓

AFAIK 如果你想让轮廓全黑,你必须将轮廓线保存在一个临时文件中(这里contour.txt)。

所以你的脚本是

reset
set contour
unset surface
set cntrparam levels incr -0.3,0.1,0.5

set view map
set xrange [0:30]
set yrange [0:30]

set dgrid3d 100,100,4

set table "contour.txt"
splot 'test.txt'
unset table

unset contour
set surface
set table "dgrid.txt"
splot 'test.txt'
unset table

reset
set pm3d map
unset key
set palette defined (0 '#352a87', 1 '#0363e1',2 '#1485d4', 3 '#06a7c6', 4 '#38b99e', 5 '#92bf73', 6 '#d9ba56', 7 '#fcce2e', 8 '#f9fb0e')
set autoscale fix
set grid

splot 'dgrid.txt' w pm3d, 'contour.txt' w l lc rgb "black"

这给了你这个:

这里

笔记:

如果您通过在每行(即每 30 个数据点)后留一个空行来格式化您的数据文件,您可以摆脱插值文件 ( dgrid.txt),因为它们已经是网格排序的。

这也可以通过awk脚本来完成。但是我懒得看。。。

其余的将保持不变,并将按预期工作。

这是它的样子:

在这种情况下,脚本将简单地变为:

set pm3d map impl
set contour
set style increment user
do for [i=1:18] { set style line i lc rgb "black"}
set cntrparam levels incr -0.3,0.1,0.5
set palette defined (0 '#352a87', 1 '#0363e1',2 '#1485d4', 3 '#06a7c6', 4 '#38b99e', 5 '#92bf73', 6 '#d9ba56', 7 '#fcce2e', 8 '#f9fb0e')
set autoscale fix
splot 'test.txt' w pm3d notitle

不需要 ntermediate 文件并且轮廓更好,因为数据不通过网格化进行插值:

在此处输入图像描述

于 2016-03-07T08:48:44.697 回答