2016-11-08 89 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)が、その方法では値を明示的に合計する必要があります。

ボックスの代わりに塗りつぶし領域を描画することは可能ですか?例えばです。ヒストグラムを積み重ね線グラフに変換しますか?

+1

はい、明示的にする必要がありますが、あなたがリンクしたページのように、 'sum'関数とともに' plot 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:(cumulated(4))title columnhead(4)、1:(cumulated(3))title columnhead 3)...「ありがとうございました。 – flaz14

+1

これは任意の列番号に対して機能し、 'firstcol'では、合計のシーケンスの最初の列を定義することができます。しかし、いくつかの列をスキップするのはちょっと面倒です。逆順を使うと 'filledcurve'と組み合わせて使うと便利です。 – Joce

関連する問題