我有这个数据文件(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)
我不得不求助于 gnuplot 6.1,以获得关键的“fillcolor”选项,但这也应该在 5.4 中,我不必提供它。这里使用的主要功能是将第 1 列文本(“Indexed”、“Tree”等)保存在字符串变量中list
,然后用于word(list,i)
提取标题的一个单词。 for 循环读取文件但不绘制任何内容,因为所有数据均无效NaN
。
颜色设置在 4 个与数据第 1 列同名的变量中。您可以使用 获取第 1 列作为字符串strcol(1)
,然后使用函数
value()
获取该名称的变量的值。这是一个由 所使用的整数lc rgb var
。在循环中也是如此for
,但这里的名称是从收集list
的名称中获取的。
我建议,对于您想要更改的输出的任何一个方面,您可以在 stackoverflow 上发布一个问题,以便反复获得您想要的答案。