将 Gnuplot 用于倍数折线图

Using Gnuplot for multiples lines chart

我有一个包含以下数据的 txt 文件:

0 0 0.000004 1 0.000003 2 0.000002 3 0.000002 ... 99 0.000002 100 0.000001

1 0 0.000002 1 0.000002 2 0.000001 3 0.000002 ... 99 0.000021 100 0.000020

2 0 0.000003 1 0.000002 2 0.000003 3 0.000003 ... 99 0.000041 100 0.000044

3 0 0.000003 1 0.000002 2 0.000004 3 0.000004 ... 99 0.000071 100 0.000070

我想在 gnuplot 折线图中使用它。每行的第一个数字定义一种颜色(一组),然后在 duo 中,第二个和第三个定义一个数据对(纵坐标上的个位数,横坐标上的小数点)。因此,第四个和第五个是二重奏,总是具有相同的颜色。 因此,在本示例中,将有 3 种不同的颜色(因此有线条),每种颜色有 100 个点。 如果需要,我可以去掉每行的第一个数字,并将换行符定义为颜色变化(组)。我用粗体显示了一些数据,以便更好地查看二重奏。

提前感谢您的帮助。 我将执行的命令将在 Unix 终端上。

嗯,你的数据格式有点特殊。您可能知道 gnuplot 不喜欢行中的数据。 幸运的是,gnuplot 也可以灵活地处理这种格式。当然,您始终可以使用其他工具将数据重新格式化为更便于 gnuplot 读取的格式。如果可能的话,我更愿意避免使用额外的外部工具来确保跨平台兼容性。

检查关键字 help forhelp matrixhelp every。 在下面的情况下 matrix every a::b:i::i 表示:它绘制从 b 列开始的每个 ath 列,但仅针对第 i 行(实际上是从第 i 行到第 i 行)。

代码:

### plot special data format
reset session

# create some test data
set print $Data
do for [i=0:3] {
    Line = sprintf("%d",i)
    do for [j=0:100] {
        Line = Line.sprintf(" %d %.3f", j, rand(0)*0.5+i)
    }
    print Line
}
set print

set key out

plot for [i=0:3] $Data u (column(1)/2-1):3 matrix every 2::2:i::i w lp \
     lc i+1 pt i+4 title sprintf("Serie %d",i)
### end of code

结果: