次のデータファイル()がありますTotalDurationBarPlot.dat
。
Indexed list 934
Tree list 3692
Array list 12274
Linked list 48188
私が達成したいのは4つのバーがあるヒストグラムです。インデックスリスト、一つはツリーリスト、一つは配列リスト、一つは接続リスト。私の要件は次のとおりです
- 各バーには独自の色があり、
- 各バーの上部にはバーの高さを示す数字があります。 (例えば上記ツリーリストを持つ3692.)
- 薄い灰色の背景に、右上に薄い黒い凡例の境界線を持つ凡例があれば良いようです。
私の現在の試み
現在私のデータファイルは次のとおりです。
# ILL TL AL LL
934 3692 12274 48188
...私のgnuplotスクリプトは次のとおりです。
set title font "Monospaced,13" 'Total duration'
set grid
set key right top
set style data histograms
set style histogram cluster gap 2
set style fill solid border 2
set xtics format ""
set grid ytics
set ylabel "Milliseconds"
set yrange [0:70000]
# set boxwidth 0.5 relative
# set label "Array list\n134908 ms" at graph 0.145,0.9
ArrayListColor = "#491d75";
IndexedListColor = "#b32929";
LinkedListColor = "#d49435";
TreeListColor = "#12520b";
plot 'TotalDurationBarPlot.dat' using 1 title "Indexed list" linecolor rgb IndexedListColor, '' using 2 title "Tree list" linecolor rgb TreeListColor, '' using 3 title "Array list" linecolor rgb ArrayListColor, '' using 4 title "Linked list" linecolor rgb LinkedListColor, '' u 0:1:1 with labels offset -6.0,-100.0 title ""
set terminal png size 650,350 enhanced font "Monospaced,13"
set output 'TotalDuration.png'
replot
exit
それは次のものを生成します:
編集1
gnuplot
回答で提供されたコード@meuh次のプロットを作成します。
答え1
私はstackoverflowから得たいくつかのヒントに従いましたが、まだ独自の解決策がない場合は、元の複数行のデータファイルを使用して十分近い近似を得ました.
set terminal png size 650,350 enhanced font "Monospaced,13"
set output 'TotalDuration.png'
set style fill solid border 2
set key noautotitle
set key box opaque fillcolor "0x7faaaaaa"
set grid x,y
set boxwidth 0.8 relative
set ylabel "Milliseconds"
set yrange [0:90000]
Array = 0x491d75
Indexed = 0xb32929
Linked = 0xd49435
Tree = 0x12520b
list=""
plot 'TotalDurationBarPlot.dat' \
u 0:3:(value(strcol(1))):xtic(1) with boxes lc rgb var, \
'' u 0:3:3:(list=list." ".stringcolumn(1)) with labels offset 0,0.7, \
for [i=1:4] '' u (NaN):(NaN):(value(word(list,i))) with boxes lc rgb var title word(list,i)
重要な「fillcolor」オプションを取得するには、gnuplot 6.1に依存する必要がありましたが、このオプションも5.4にある必要があり、提供する必要はありませんでした。ここで使用される主な機能は、列1のテキスト(「Indexed」、「Tree」など)を文字列変数に保存し、タイトルの単語を抽出するためにlist
使用word(list,i)
されます。 forループはファイルを読み込みますが、すべてのデータが無効なため、何も描画されませんNaN
。
色は、データの列1と同じ名前の4つの変数に設定されます。 get列1を文字列として使用し、関数をstrcol(1)
使用して
value()
その名前の変数値を取得できます。で使用する整数ですlc rgb var
。ループでも同様ですが、ここでは収集された名前からfor
名前を取得します。list
変更したい出力のすべての側面について、stackoverflowに質問を投稿して、希望する回答を引き続き取得することを提案します。