在Gnuplot中使用混合数据打印多列文件 我有一个数据文件,有三列:席,彝,和Zi,像这样:< /P> 1 1 2 2 4 4 3 9 6 4 16 8 5 25 10 我需要把易子和西子划上席。因此,我使用以下命令: plot 'speed.txt' using 1:2 with lines, 'speed.txt' using 1:3 with lines

在Gnuplot中使用混合数据打印多列文件 我有一个数据文件,有三列:席,彝,和Zi,像这样:< /P> 1 1 2 2 4 4 3 9 6 4 16 8 5 25 10 我需要把易子和西子划上席。因此,我使用以下命令: plot 'speed.txt' using 1:2 with lines, 'speed.txt' using 1:3 with lines,gnuplot,Gnuplot,得到这个图: 但问题是,我的数据文件在大多数情况下不在三列中。基本上,我有两种不同的数据类型,它们存储在两列中。因此,上面相同的三列文件将是两列格式的:(最后一列显示生成此数据的汽车) 数据类型中没有特殊的模式,这意味着car1可以生成10行,然后car3生成2行,等等。它们都是混合的(类似于异步发生事件的日志文件) 有没有办法从这些数据中得到相同的图?例如,使用汽车名称作为键来分隔不同的数据类型。这里有一种方法可以做到这一点。对于第二列中的两个以上的不同名称,它的伸缩性不太好,但确实有效:

得到这个图:

但问题是,我的数据文件在大多数情况下不在三列中。基本上,我有两种不同的数据类型,它们存储在两列中。因此,上面相同的三列文件将是两列格式的:(最后一列显示生成此数据的汽车)

数据类型中没有特殊的模式,这意味着car1可以生成10行,然后car3生成2行,等等。它们都是混合的(类似于异步发生事件的日志文件)


有没有办法从这些数据中得到相同的图?例如,使用汽车名称作为键来分隔不同的数据类型。

这里有一种方法可以做到这一点。对于第二列中的两个以上的不同名称,它的伸缩性不太好,但确实有效:

set datafile separator ","
plot '<awk ''{printf "%s,%s\n", $1, $3=="car1"?"," $2:$2}'' cars' u 1:2, '' u 1:3
设置数据文件分隔符“,”
阴谋
set datafile separator ","
plot '<awk ''{printf "%s,%s\n", $1, $3=="car1"?"," $2:$2}'' cars' u 1:2, '' u 1:3
plot '<awk '' \
function r(n) { s=""; for(j=0;j<n;++j) s=s ","; return s } \
{ a[$3,$1] = $2 } \
!seen[$3] { seen[$3] = ++c } \
END{ \
    for (i in a) { \
        split(i,b,SUBSEP); \
        printf "%s%s%s\n", b[2], r(seen[b[1]]),a[i] \
    } \
}'' cars' using 1:2, '' using 1:3
# repeat comma n times
function r(n) { 
    s=""
    for (j = 0; j < n; ++j) 
    s = s ","
    return s 
}

# add each element to array, indexed on third,first column
{ a[$3,$1] = $2 }

# register any new names seen in column three
!seen[$3] { 
    seen[$3] = ++c
}

END {
    for (i in a) {
        # the index $3,$1 from above is separated by 
        # the built-in variable SUBSEP                  
        split(i, b, SUBSEP)
        # now b[1] is the name (car1 or car2)
        # which is used to determine how many commas
        # b[2] is the x value
        # a[i] is the y value
        printf "%s%s%s\n", b[2], r(seen[b[1]]), a[i] 
    }                   
}
plot '<awk -f cars.awk cars' using 1:2, '' using 1:3