我想重现一个像this one这样的条形图,即:多个组,每个组都有很多条(在我的情况下是4个条),每个条被分割成几个切片(在我的情况下是两个切片) )。
在我的情况下,我有四种算法应用于不同大小的矢量(2 ^ 0到2 ^ 20)。每个算法都有两个“部分”,即局部计算和通信。对于每个矢量大小,我想显示每个算法执行本地计算和通信所需的时间,以及与这两个部分之和相对应的总时间。
因此,我希望每个矢量大小都有一个组。在每个组中,有四个条对应于四个算法,并且每个条被分割成对应于本地计算的(例如)红色部分和对应于通信的蓝色部分。
gnuplot可行吗?我可以提供任何有用的数据。
非常感谢提前。
答案 0 :(得分:0)
对于您的数据集,堆叠local和comm部分是没有意义的,因为comm部分很小,无法在图中看到它。在任何情况下,根据进一步的要求(图例条目,刻度标签等)组合堆叠和群集也是非常棘手的。
以下是如何为数据集绘制聚类直方图的示例:
set style histogram clustered gap 1
set style data histogram
set style fill solid 1.0 noborder
set termoption enhanced
set xtics out nomirror
myxtic(x) = sprintf('2^{%d}', int(floor(log(x)/log(2) + 0.5)))
plot 'test.dat' using ($2+$3):xtic(myxtic(stringcolumn(1))) title 'Algorithm 1',\
for [i=2:4] '' using (column(2*i)+column(2*i+1)) title sprintf('Algorithm %d', i)
结果是:
要按算法分组,您可以使用newhistogram
关键字创建新群组:
set style histogram rowstacked title offset 4,1
set boxwidth 0.9 relative
set style fill solid 1.0 border lt -1
set xtics rotate by 90 right
plot newhistogram "Algorithm 1" lt 1,\
'test.dat' using 2:xtic(1) title columnheader, \
'' using 3 title columnheader,\
newhistogram "Algorithm 2" lt 1,\
'test.dat' using 4:xtic(1) notitle, \
'' using 5 notitle,\
newhistogram "Algorithm 3" lt 1,\
'test.dat' using 6:xtic(1) notitle, \
'' using 7 notitle,\
newhistogram "Algorithm 4" lt 1,\
'test.dat' using 8:xtic(1) notitle, \
'' using 9 notitle
local
和comm
数据堆叠在一起,但comm
部分非常小,您无法在图表中看到它(仅在放大时)。
对于输出我使用4.6.3和以下设置:
set terminal pngcairo size 1000,400
set output 'test.png'
set xtics font ',6'
结果是:
xtics的更复杂的显示需要一些欺骗,因为对于直方图,xtics不被视为数字,而是字符串。这是一个例子:
set terminal pngcairo size 1000,400
set output 'test.png'
set style histogram rowstacked title offset 0,-0.5
set bmargin 3
set boxwidth 0.9 relative
set style fill solid 1.0 border lt -1
set termoption enhanced
set xtics out nomirror
myxtic(x) = (int(floor(log(x)/log(2) + 0.5)) % 5 == 0) ? sprintf('2^{%d}', int(floor(log(x)/log(2) + 0.5))) : ""
plot newhistogram "Algorithm 1" lt 1,\
'test.dat' using 2:xtic(myxtic(real(stringcolumn(1)))) title columnheader, \
'' using 3 title columnheader,\
newhistogram "Algorithm 2" lt 1,\
'test.dat' using 4:xtic(myxtic(real(stringcolumn(1)))) notitle, \
'' using 5 notitle,\
newhistogram "Algorithm 3" lt 1,\
'test.dat' using 6:xtic(myxtic(real(stringcolumn(1)))) notitle, \
'' using 7 notitle,\
newhistogram "Algorithm 4" lt 1,\
'test.dat' using 8:xtic(myxtic(real(stringcolumn(1)))) notitle, \
'' using 9 notitle
结果