我有这个数据文件(TotalDurationBarPlot.dat
):
Indexed list 934
Tree list 3692
Array list 12274
Linked list 48188
我希望实现的是一个带有 4 个条形图的直方图:一个用于Indexed list,一个用于Tree list,一个用于Array list,一个用于Linked list。我的要求是:
- 每个酒吧都有它独特的颜色,
- 在每个栏的顶部,有一个数字表示栏的高度。(例如,在Tree list上方,有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
@meuhgnuplot
的答案中提供的代码生成以下图:
我遵循了您从 stackoverflow 获得的一些提示,如果您还没有自己的解决方案,我将使用原始多行数据文件以这种足够接近的近似值结束。
我不得不求助于 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 上发布一个问题,以便迭代地获得您想要的答案。