GNUPLOT - 两列直方图,其值在条形图的顶部

时间:2016-11-08 10:28:45

标签: gnuplot histogram

yesteraday我提出了类似的问题(this one)。我无法在gnuplot直方图中显示条形顶部的值。我失去了很多时间,因为我找不到关于它的真正好的文档,我只能在不同的网站上找到类似的问题。

我失去了很多时间但幸运的是有人给了我解决方案。现在我有一个类似的问题,直方图有两个条形图,其中我必须在两个条形图上面加上它的值。我很接近,或者这就是我的想法,但我不能让它正常工作。我正在更改脚本并多次重新生成图形,但我不确定我在做什么。

script.sh

#!/usr/bin/gnuplot
set term postscript
set terminal pngcairo nocrop enhanced size 600,400 font "Siemens Sans,8"
set termoption dash
set output salida
set boxwidth 0.8 absolute
set border 1
set style fill solid 1.00 border lt -1
set key off
set style histogram clustered gap 1 title textcolor lt -1
set datafile missing '-'
set style data histograms
set xtics border in scale 0,0 nomirror autojustify
set xtics  norangelimit
set xtics ()
unset ytics
set title titulo font 'Siemens Sans-Bold,20'
set yrange [0.0000 : limite1] noreverse nowriteback
set y2range [0.0000 : limite2] noreverse nowriteback
show style line


set style line 1 lt 1 lc rgb color1 lw 1
set style line 2 lt 1 lc rgb color2 lw 1

## Last datafile plotted: "immigration.dat"
plot fuente using 2:xtic(1) ls 1 ti col axis x1y1, '' u 3 ls 2 ti col axis x1y2, '' u 0:2:2 with labels offset -3,1 , '' u 0:2:3 with labels offset 3,1

我正在修改最后一个代码行,因为我在这里设置标签。我已经能够显示两个标签,但在不好的位置,我也能够在正确的位置显示其中一个标签,但没有显示另一个标签。除了我想要的东西之外,我几乎可以展示所有东西。这是生成脚本的图表。

output.png

enter image description here

这是我用于生成图表的源文件

source.dat

"Momento" "Torre 1" "Torre 2" 
"May-16" 1500.8 787.8
"Jun-16" 1462.3 764.1
"Jul-16" 1311.2 615.4
"Ago-16" 1199.0 562.0
"Sep-16" 1480.0 713.8
"Oct-16" 1435.1 707.8

这是我用参数集

执行的命令
gnuplot -e "titulo='Energía consumida por torre (MWh)'; salida='output.png'; fuente='source.dat'; color1='#FF420E'; color2='#3465A4'; limite1='1800.96'; limite2='945.36'" script.sh

我认为我假装的很明显,有人可以帮助我吗?

提前多多感谢。

3 个答案:

答案 0 :(得分:4)

您的脚本有几个问题,缺少的ti col只是其中之一。 (您也可以使用set key auto columnheader,然后每次都不得提供该选项。

  • 如果您想比较这些值,请不要同时使用y1y2轴!否则正确的酒吧高度只是运气问题......

  • 了解gnuplot如何定位直方图条,然后您可以准确定位每个条的顶部中心。如果您只使用带有offset值的char(只提供数字时就是这种情况),那么只要添加或删除数据行,您的脚本就会中断。

直方图簇从x位置0开始,并以x的整数值为中心。由于每个群集中有两个条形,间隙为1,因此第一个条形图的中心位于($0 - 1/6.0)(= 1/(2 * (numberOfTorres + gapCount))),第二个条形图的中心位于($0 + 1/6.0)

set terminal pngcairo nocrop enhanced size 600,400 font ",8"
set output 'output.png'
set title 'Energía consumida por torre (MWh)' font ",20"
set boxwidth 0.8 absolute
set border 1
set style fill solid 1.00 border lt -1
set style histogram clustered gap 1 title textcolor lt -1
set style data histograms
set xtics border scale 1,0 nomirror autojustify norangelimit
unset ytics

set key off auto columnheader
set yrange [0:*]
set offset 0,0,graph 0.05,0

set linetype 1 lc rgb '#FF420E'
set linetype 2 lc rgb '#3465A4'
# dx = 1/(2 * (numberOfTorres + gap))
dx = 1/6.0

plot 'source.dat' using 2:xtic(1),\
     '' u 3,\
     '' u ($0 - dx):2:2 with labels,\
     '' u ($0 + dx):3:3 with labels

enter image description here

现在,从酒吧中心开始,您可以安全地使用offset来指定相对于酒吧顶部中心的偏移量:

plot 'source.dat' using 2:xtic(1),\
         '' u 3,\
         '' u ($0 - dx):2:2 with labels offset -1,1 ,\
         '' u ($0 + dx):3:3 with labels offset 1,1

enter image description here

第二种选择是使用标签的对齐方式:红色条的标签在条形右边框右对齐,蓝条的标签在条形左边框左对齐:

absoluteBoxwidth = 0.8
dx = 1/6.0 * (1 - absoluteBoxwidth)/2.0

plot 'source.dat' using 2:xtic(1),\
         '' u 3,\
         '' u ($0 - dx):2:2 with labels right offset 0,1 ,\
         '' u ($0 + dx):3:3 with labels left offset 0,1

enter image description here

在任何情况下,这两个选项都可以使您的脚本对输入数据的更改更加健壮。

答案 1 :(得分:1)

这看起来更好: enter image description here

plot fuente using 3:xtic(1) ls 1 ti col axis x1y1, '' u 3 ls 2 ti col axis x1y2, '' u ($0-1):3:3 with labels offset -3,1 , '' u ($0-1):2:2 with labels offset 3,1

您有2个绘图命令:仅显示第一个。 此外,script.sh应该是一个bash脚本。这是一个gnuplot脚本,因此它应该有另一个扩展名。

答案 2 :(得分:1)

问题是ti col标签。您需要将它放在每个选项中,包括标签,而不仅仅是在栏中。正确的代码是:

plot fuente using 2:xtic(1) ls 1 ti col, '' u 3 ls 2 ti col, '' u 0:2:2 ti col with labels offset -3,1 , '' u 0:3:3 ti col with labels offset 3,1

这就是图片现在的显示方式:

enter image description here

你也可以避免ti col,这就是它的样子:

enter image description here