2016-11-08 194 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