GNUPLOT:如何使用 CSV-file 中的 header 行作为循环中的绘图 header?

GNUPLOT: how to use a header row from CSV-file as plot header in a loop?

我有具有以下结构的 CSV 文件:

headerString1;headerString2;...;headerStringN
doubleNumber1;doubleNumber2;...;doubleNumberN
... many other doubleNumberRows

我想绘制 个人 文件中每一列的直方图 - 这是可行的 - 我想从 CSV-file,第一行。我搜索了很多,但可以找到解决方案。到目前为止,这是我的 gnuplot 代码:

set datafile separator ";"
set style data histogram

binwidth=20
set boxwidth binwidth-2
bin(x,width)=width*floor(x/width)

# No legends!
unset key

do for [COL=1:10] {
    set title sprintf("%d", columnheader(COL)) <--- This always tells me it is a number, "%s" does not work
    FILE = sprintf("%s%02d%s","Histogram",COL,".png")
    set term png giant font helvetica 24 size 1440, 1080
    set output FILE
    plot "myCSVFile.CSV" using (bin(column(COL),binwidth)):(1.0) smooth freq with boxes lc 1
}

columnheader(COL) 是一个数字(?),至少我可以通过 sprintf("%d", columnheader(COL)) 将其转换为数字字符串对于所有地块都是“-2147483648”。输出如下所示:

如何检索 headerString# 字符串并将其用作个人情节中的标题?

您只能在非常特定的上下文中访问列标题字符串,例如在 plot 命令中。设置绘图标题不是其中之一(set title 甚至不知道您将使用哪个数据文件),但创建图例条目是。因此,您可以将图例放在标题通常出现的位置。

例如,给定数据文件 test.csv

First Column;Second Column
-900;-700
-1100;-800
-1000;-650

你可以使用

set term push

set datafile separator ";"
set style data histogram
set style fill solid 1

binwidth=20
set boxwidth binwidth-2
bin(x,width)=width*floor(x/width)

set key outside top center samplen 0

do for [COL=1:2] {
    FILE = sprintf("%s%02d%s","Histogram",COL,".png")
    set term pngcairo
    set output FILE

    plot "test.csv" using (bin(column(COL),binwidth)):(1.0) smooth freq notitle with boxes lc 1, \
         NaN title columnhead(COL) with lines lc rgb "white"

    set output
}

set term pop

并得到

这里我把显示直方图的图和生成图例条目的图分开了,这样示例图片就不会出现在图例中了。

或者,如果您事先知道可能的列标题,您也可以使用

do for [name in '"First Column" "Second Column"'] {
   set title name
   plot "test.csv" using (bin(column(name),binwidth)):(1.0) smooth freq notitle with boxes lc 1
}

我找到了解决我的问题的解决方法

我没有从文件中提取列 header(这是可取的),而是创建了一个标题数组,我必须从 csv 文件中复制它:( 代码:

titles = "columnHeader1 ... columnHeaderN"

do for [COL=1:N] {
    FILE = sprintf("%s%02d%s","Histogram",COL,".png")
    set term png giant font helvetica 24 size 1440, 1080
    set output FILE
    set title word(titles, COL)
    plot "InputFileName.CSV" using (bin(column(COL),binwidth)):(1.0) smooth freq with boxes lc 1
}

这行得通,但比预期多点击几下...