36

假设我有一个看起来像这样的文件(注意双换行符):

"p = 0.1"
1 1
3 3
4 1


"p = 0.2"
1 3
2 2
5 2

是否可以让 Gnuplot 将这两个数据集绘制在一个图中,并在每个数据集的第一行给出标题?

4

5 回答 5

40

这绝对是可能的,您的数据文件已经是正确的格式。您正在寻找的功能是内置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)
于 2012-10-10T14:31:53.233 回答
8

这是Bruce_WarriorCiro 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
于 2017-05-06T11:24:37.633 回答
4

基于 andyras 给出的答案(答案 1答案 2)自动化所有过程的解决方案是使用:

datafile = 'test.dat'
stats datafile
plot for [IDX=1:STATS_blocks] datafile index (IDX-1) u 1:2 w lines t\ 
columnheader(1) lc variable

这样,脚本会自动检测数据块的数量,并使用不同的颜色和在每个数据块的第一行中定义的相应标题进行绘图。

于 2015-04-07T15:38:03.787 回答
4

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

在我测试过的任何一个版本中都不起作用,它只是被忽略了。

于 2016-08-29T16:46:10.117 回答
1

稍微修改您的数据集(以便标题作为注释给出):

#"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 命令的indexi简称)选项告诉 gnuplot 绘制第ith 个数据集。我找不到让 gnuplot 自动从标题中获取标题的方法,这就是为什么我使用titlet简称)选项手动指定它们的原因。

于 2012-10-10T13:06:44.050 回答