GNUPlot - 堆叠线中的任意列数

时间:2016-05-06 03:32:08

标签: csv gnuplot data-visualization reusability

我正在开发一个脚本,它为给定的x值生成一个具有任意数量y值的csv。 csv的第一行包含数据集的名称。 x值是unix时间戳。我想使用gnuplot将此数据绘制为堆叠线图,其中值显示为该行总计的分数。我该怎么做?

我已经看过以下解决方案,并尝试整合它们,但我无法弄清楚我做错了什么。

它会说列数不足或列数不匹配。

给定时间索引最多有N列数据。我看的总数是给定的时间指数。

-

我的数据示例:

KEY,CSS,JavaScript,Perl,Python,Shell
1428852630,0,0,0,0,406
1428852721,0,0,0,0,406
1428852793,0,0,0,0,406
1428853776,0,0,0,0,781
1429889154,0,0,0,0,1200
1429891056,0,0,0,0,1648
1429891182,0,0,0,0,1648
1429891642,0,0,0,0,1648
1430176065,0,0,0,0,2056

但是,可能会有大量列,我想要一个在运行时设置列数的列。

http://gnuplot.sourceforge.net/demo/histograms.html - 这似乎与修改为具有任意数量的列有关。

plot 'immigration.dat' using (100.*$2/$24):xtic(1) t column(2), \
    for [i=3:23] '' using (100.*column(i)/column(24)) title column(i)

https://newspaint.wordpress.com/2013/09/11/creating-a-filled-stack-graph-in-gnuplot/

1 个答案:

答案 0 :(得分:1)

This answer显示如何对列进行计数,稍作修改:

file="file.dat"
get_number_of_cols = "awk -F, 'NR == 1 { print NF; exit }' ".file
nc=system(get_number_of_cols)

然后你需要将字母列表2添加到nc,让我们通过递归来完成:

sum(c,C)=((c!=C)?column(c)+sum(c+1,C):column(c))

现在你可以绘制:

set key outside
set datafile separator ","
plot for [i=nc:2:-1] file using 0:(100*sum(2,i)/sum(2,nc)):xtic(1) title columnhead(i) with filledcurve y=0

enter image description here