我有一个数据文件(.tab
有 11 列和 ~30000 行),当我继续时gnuplot
,我写道:
set pm3d map
splot "merged.tab" u x:y:z
并说:
Warning: Single isoline (scan) is not enough for a pm3d plot.
Hint: Missing blank lines in the data file? See 'help pm3d' and FAQ.
在其他文件上,它可以工作,但我不知道为什么它对这个文件不起作用。
我是否必须编辑文件才能获得我想要的列?但我真的无法通过.tab
文件做到这一点?
任何帮助都将受到赞赏。
答案1
您的数据文件必须具有适当的网格格式(xyz 或矩阵 -> 这两个链接应该可以澄清[1],[2])。按照 xyz 格式,您的 x 列必须以这样的方式排列:x 值的每次变化之间都有一个空行。
例如 xyz 网格格式为:
# X Y Z
0 0 0
0 1 1
0 2 4
0 3 9
0 4 16
0 5 25
1 0 1
1 1 2
1 2 5
1 3 10
1 4 17
1 5 26
... ... ...
采用这种网格格式的原因在于,您的目标是绘制等值线的二维投影,因为您使用pm3d地图。
但是,请注意,如果您的数据文件包含数据(例如函数的结果),这并不一定意味着它们具有网格格式,您必须找到一种编程方法来赋予它们这种格式。也许这个 TAB 格式(我不知道)包含“网格”格式的数据,只需要对 x 列进行排序并添加空白行。
答案2
复制粘贴答案http://www.gnuplot.info/faq/faq.html#x1-320003.9
3.9 数据文件中的 Pm3d splot 不绘制任何内容
您确实设置了 pm3d;splot 'a.dat',没有绘图,但出现了颜色框。也许数据文件中两个后续扫描(等值线)之间没有空白行?添加空白行!如果您好奇这意味着什么,那么请毫不犹豫地查看 gnuplot 演示目录中的 demo/glass.dat 或 demo/triangle.dat 等文件。
您会发现以下 awk 脚本(例如,将其称为 addblanks.awk)很有用,只要第一列中的数字发生变化,它就会向数据文件中添加空行:
/^[[:blank:]]*#/ {next} # ignore comments (lines starting with #)
NF < 3 {next} # ignore lines which don’t have at least 3 columns
$1 != prev {printf ~\n~; prev=$1} # print blank line
{print} # print the line
然后,通过命令 awk -f addblanks.awk 预处理数据文件,或者通过 gnuplot> splot ~ 在 unixish 平台下绘制数据文件
但是我的 awk 版本无法理解该代码。因此,我不得不将第三行替换为
$1 != prev {printf "\n"; prev=$1} # print blank line