具有重叠条对的Gnuplot直方图

时间:2018-04-24 02:04:42

标签: gnuplot histogram bar-chart

我试图绘制一个条形图/直方图,为x轴的每个点显示两个条形图,每个条形图分为三个部分。采用以下数据集:

Min #   Max #   Avg #   Min %   Max %   Avg %
6       12      6.67    13      100     35.25
0       6       3       0       90      43.25
235     1243    553     66.67   100     83.43

这个想法是,对于每一行,都会有一对垂直条,左边一个代表三个#值,另一个代表三个%值。这些数值是弥补的,但规模或多或少是真实的。

到目前为止,我已经设法获得以下脚本,这是我发现的几个在线脚本的frankenstein:

set ytics 10 nomirror tc lt 1
set y2tics 100 nomirror tc lt 2
set yrange [0:120]
set y2range [0:1500]
set style fill solid border -1

plot "table2.dat" using 5:xticlabels(1) with boxes lt rgb "#40FF00" t "Max \%",\
 "" using 6 lt rgb "#406090" t "Avg \%",\
 "" using 4 with boxes lt rgb "#403090" t "Min \%"

这将绘制出以下图表:

Chart

我似乎无法弄清楚如何将前三列放入第二个栏。理想情况下," X"也可以用切割条的虚线代替。两个Y轴的原因是每个条跟随不同的比例,因此第二个条必须与右侧y轴成比例。最后,我不得不加上那个小小的" hack"使yrange高于100,这样酒吧就不会击中顶部"。如果还有其他办法,那就太棒了。

提前感谢您提供的任何帮助,我是gnuplot的新手,但是由于尝试使用电子表格工具制作此图表是一个更大的痛苦,我希望有人能够提供帮助至少有一些问题。

编辑:我会就这个问题提出更好的标题建议。

1 个答案:

答案 0 :(得分:0)

通过将boxwidth设置为默认宽度的0.4,并定义一个函数(我在这里使用f),您可以进一步将第1列中的数据转换为百分比值,并明确使用x语法提供x:y坐标,并使用$1引用第1列等。$0是行。

set boxwidth 0.4 relative
f(y,max) = (y*100./max)

plot "table2.dat" \
 using 5:xticlabels(1) with boxes lt rgb "#40FF00" t "Max \%",\
 "" using 6  lt rgb "#406090" t "Avg \%",\
 "" using 4 with boxes lt rgb "#403090" t "Min \%",\
 "" using ($0-.5):(f($2,$2)) with boxes lt rgb "red" t "Max",\
 "" using ($0-.5):(f($3,$2))  lt rgb "blue" t "Avg",\
 "" using ($0-.5):(f($1,$2)) with boxes lt rgb "orange" t "Min"

我使用了一些花哨的颜色来显示新框:enter image description here