gnuplot调用命令不支持箭头和标签



我试图在gnuplot中使用"call"创建相当于子程序的东西。命令。

我有一个文件label。gp包含

set arrow 1 from first ARGV[1], first 110 
to first ARGV[1], first 114 
dt 5 lc rgb ARGV[3] nohead
set arrow 2 from first ARGV[1], first 112 
length character -4 angle 0 
backhead lc rgb ARGV[3]
set label 1 at first ARGV[1], first 112 right tc rgb ARGV[3] 
offset character -4.5, character 0.0 ARGV[2]
print ARGV[1]
print ARGV[2]
print ARGV[3]

应该在图上放一个带标签的箭头

然后在我的主gnuplot文件中,在大量设置之前,我有

call 'label.gp' "2021-09-01-00-00" "Event" "blue"
call 'label.gp' "2021-09-02-00-00" "Another Event" "red"
plot [:] [40:130]  .......

绘制图形,应该绘制箭头和标签。它不是。标签中的打印命令。如果做了正确的事,就会画出图,但标签却没有。

有什么建议吗?

我怀疑这是一个错误,发生在数组元素作为位置参数的"set arrow"set label"

这可以用下面的脚本轻松地演示。

set xdata time
set timefmt "%Y-%m-%d-%H-%M"
T1 = "2021-09-01-00-00"
T2 = "2021-09-02-00-00"
array T[2] = [T1, T2]
set arrow 1 from "2021-09-01-00-00", 0 to "2021-09-02-00-00", 0
set arrow 2 from T1, 0 to T2, 0
set arrow 3 from T[1], 0 to T[2], 0
show arrow 1
show arrow 2
show arrow 3

使用gnuplot 5.4,该脚本将产生如下输出:

arrow 1, head nofilled back linewidth 1.000 dashtype solid
from ("2021-09-01-00-00", 0.00000, 0.00000) to ("2021-09-02-00-00", 0.00000, 0.00000)

arrow 2, head nofilled back linewidth 1.000 dashtype solid
from ("2021-09-01-00-00", 0.00000, 0.00000) to ("2021-09-02-00-00", 0.00000, 0.00000)

arrow 3, head nofilled back linewidth 1.000 dashtype solid
from ("1970-01-01-00-33", 0.00000, 0.00000) to ("1970-01-01-00-33", 0.00000, 0.00000)

只有使用数组元素作为位置参数的"箭头3"显示了意外的行为。

解决方案1

用ARG1代替ARGV[1]。

set arrow 1 from first ARG1, first 110 
to first ARG1, first 114 
dt 5 lc rgb ARGV[3] nohead
...

解决方案2

将ARGV[1]赋值给用户定义的变量,并使用该变量作为位置参数。

xpos = ARGV[1]
set arrow 1 from first xpos, first 110 
to first xpos, first 114 
dt 5 lc rgb ARGV[3] nohead
...

看起来您为标签和箭头提供了x坐标作为日期,但是您没有显示用于定义日期格式和x轴范围的命令。我怀疑问题是,你显示的字符串不匹配的时间格式,是在"设置标签"时生效。执行命令

尝试在call命令之前加上如下内容:

set xdata time
set timefmt "%Y-%m-%d-%H-%M"
set xrange [ "2021-01-00-00" : "2022-01-00-00" ]
call ...
call ...

最新更新