2016-11-08 202 views
1

我使用内部基准测试工具。我使用gnuplotgnuplot 4.6 patchlevel 4)进行可视化。gnuplot - 绘制堆积折线图

我需要表示结果(方法执行时间几次运行)作为堆叠线图,是这样的:

example stacked line chart

下面是一个摘录从我.tsv数据文件:

Run MethodA MethodB MethodC 
1 192 171 152 
2 227 178 161 
... 
10 229 161 149 

而我正在使用的脚本:

#!/usr/bin/gnuplot -p 

reset 
clear 

set terminal png size 640,480 
set output "timings.png" 
set key top left outside horizontal autotitle columnhead 
set title "Third-party REST calls" 

set xlabel "Run (ordinal)" 
set xtics nomirror scale 0 

set ylabel "Time (milliseconds)" 
set ytics out nomirror 

set grid ytics lt 0 lw 1 lc rgb "#bbbbbb" 

set style data histogram 
set style histogram rowstacked 
set style fill solid border -1 
set boxwidth 0.75 

plot "timings.tsv" using 2:xticlabels(1) , "" using 3, "" using 4 

我得到以下结果:

histogram

是的,它不是一个折线图,但直方图(我需要代表每个方法的执行时间的百分比)。我需要稍微不同的结果(相同的直方图,不是盒子,但与连接盒的顶部线条与下方填充线),像这样:

stacked line diagram - desired diagram

我与filledcurve的认识方法(例如,在那里描述Creating a Filled Stack Graph in GNUPlot),但在这种方法中,你需要明确地求和值。

是否可以通过gnuplot来绘制填充区域而不是框,例如,将直方图转换为堆积折线图?

+1

是的,你必须明确地总结,但是这是使用'情节与'sum'功能一起for',就像在页面你链接很容易。 – Christoph

回答

1

您确实需要明确地总结值,但这不是一个大问题。你可以编写脚本很容易:

firstcol=2 
cumulated(i)=((i>firstcol)?column(i)+cumulated(i-1):(i==firstcol)?column(i):1/0) 
plot "file.dat" using 1:(cumulated(4)), "" using 1:(cumulated(3)), "" using 1:(cumulated(2)) 
+0

它不仅适用于3个数据列。我也成功地总结了6栏。 '...使用1:(累积(4))“,”使用1:(累积(3))...'的唯一缺点是列标题消失。所以传说会被错过。但是,要恢复它并不难,只需为每列添加标题,如下所示:'...使用1 :(累计(4))标题栏目(4),“”使用1 :(累计(3))标题栏目3)......“非常感谢。 – flaz14

+1

它适用于任何列号,'firstcol'允许您定义序列的第一列进行求和。尽管如此,跳过一些专栏会有些尴尬。使用相反顺序可以与'filledcurve'结合使用。 – Joce