假设我有一个看起来像这样的文件(注意双换行符):
"p = 0.1"
1 1
3 3
4 1
"p = 0.2"
1 3
2 2
5 2
是否可以让 Gnuplot 将这两个数据集绘制在一个图中,并在每个数据集的第一行给出标题?
假设我有一个看起来像这样的文件(注意双换行符):
"p = 0.1"
1 1
3 3
4 1
"p = 0.2"
1 3
2 2
5 2
是否可以让 Gnuplot 将这两个数据集绘制在一个图中,并在每个数据集的第一行给出标题?
这绝对是可能的,您的数据文件已经是正确的格式。您正在寻找的功能是内置columnheader(N)
的,它读取第 N 列顶部的数据并将其用作绘图标题:
plot 'test.dat' i 0 u 1:2 w lines title columnheader(1),\
'test.dat' i 1 u 1:2 w lines title columnheader(1)
可以使用迭代来浓缩:
plot for [IDX=0:1] 'test.dat' i IDX u 1:2 w lines title columnheader(1)
这是Bruce_Warrior和Ciro Santilli 的答案,但没有中间stats
:
# plot.gpi
datafile = ARG1
plot for [i=0:*] datafile index i using 1:2\
with lines title columnheader(1)
for
循环可以直接遍历文件中的所有数据集。它适用于 gnuplot 5.0.5,但我不确定何时for
获得此功能。它记录在5.0 手册中,但没有记录在 4.6 手册中。
除非线条颜色应由linecolor variable
(根据布鲁斯的回答)消耗的第三个输入列确定,否则 gnuplot 将自动分配不同的颜色和线条样式。在这种特定情况下using 1:2
也可以省略。
$ gnuplot --version
gnuplot 5.0 patchlevel 5
$ gnuplot --persist -c plot.gpi test.dat
test.dat
是
"p = 0.1"
1 1
3 3
4 1
"p = 0.2"
1 3
2 2
5 2
gnuplot 5.1 (2016/08/28)
这类似于https://stackoverflow.com/a/29495496/895245但对更高版本进行了一些修复。
https://stackoverflow.com/a/43819870/895245教会了我for [i=0:*]
分配的语法,stats
因此更好一点。
脚本:
datafile = 'test.dat'
stats datafile nooutput
plot for [IDX=0:STATS_blocks-1] \
datafile \
index IDX \
using 1:2 \
with lines \
title columnheader(1)
测试数据:
a
1, 1
2, 2
3, 3
"b"
1, 1
2, 4
3, 9
"c, c"
1, 1
2, 8
3, 27
输出:
这适用于 gnuplot 2016/08/28,稍后将成为 gnuplot 5.1,但不适用于 gnuplot 5.0.3 (Ubuntu 16.04),因为在 5.0.3 中,stats
由于列标题不是有效数据,该命令会出错。而在 2016/08/28,它只是一个警告。
我在以下位置询问了如何删除警告:https ://groups.google.com/forum/#!topic/comp.graphics.apps.gnuplot/Pi4aBE2PwZ8
使用如下评论:
#a
1, 1
2, 2
3, 3
在我测试过的任何一个版本中都不起作用,它只是被忽略了。
稍微修改您的数据集(以便标题作为注释给出):
#"p = 0.1"
1 1
3 3
4 1
#"p = 0.2"
1 3
2 2
5 2
您可以将这两个数据集绘制为单独的线,如下所示:
plot 'data.dat' i 0 t "p = 0.1", '' i 1 t "p = 0.2"
plot 命令的index
(i
简称)选项告诉 gnuplot 绘制第i
th 个数据集。我找不到让 gnuplot 自动从标题中获取标题的方法,这就是为什么我使用title
(t
简称)选项手动指定它们的原因。