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)

我不得不求助于 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 上发布一个问题,以便反复获得您想要的答案。

相关内容