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
}
这行得通,但比预期多点击几下...
我有具有以下结构的 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
}
这行得通,但比预期多点击几下...