gnuplot - 上部に値を持つさまざまな色のヒストグラムバー

gnuplot - 上部に値を持つさまざまな色のヒストグラムバー

次のデータファイル()がありますTotalDurationBarPlot.dat

Indexed list 934
Tree list 3692
Array list 12274
Linked list 48188

私が達成したいのは4つのバーがあるヒストグラムです。インデックスリスト、一つはツリーリスト、一つは配列リスト、一つは接続リスト。私の要件は次のとおりです

  1. 各バーには独自の色があり、
  2. 各バーの上部にはバーの高さを示す数字があります。 (例えば上記ツリーリストを持つ3692.)
  3. 薄い灰色の背景に、右上に薄い黒い凡例の境界線を持つ凡例があれば良いようです。

私の現在の試み

現在私のデータファイルは次のとおりです。

# 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に質問を投稿して、希望する回答を引き続き取得することを提案します。

関連情報