我试图绘制一个条形图/直方图,为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 \%"
这将绘制出以下图表:
我似乎无法弄清楚如何将前三列放入第二个栏。理想情况下," X"也可以用切割条的虚线代替。两个Y轴的原因是每个条跟随不同的比例,因此第二个条必须与右侧y轴成比例。最后,我不得不加上那个小小的" hack"使yrange高于100,这样酒吧就不会击中顶部"。如果还有其他办法,那就太棒了。
提前感谢您提供的任何帮助,我是gnuplot的新手,但是由于尝试使用电子表格工具制作此图表是一个更大的痛苦,我希望有人能够提供帮助至少有一些问题。
编辑:我会就这个问题提出更好的标题建议。
答案 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"