我正在创建一个图,其中我标记了双时间序列的最小值和最大值。
我这样做是通过定义min
和max
函数,并在每个时间点绘制每个系列以及更高和更低值的标签。标签向上和向下偏移,因此不会与线条重叠。
请注意,无论第一列或第二列中的值是否更高,标签始终是第二列中的值。
主要问题似乎是min / max函数的工作方式与绘图点相同,但不适用于选择标签。
为什么会这样?
这是我的MWE:
set terminal pdfcairo size 3,2
set output 'output.pdf'
# min/max functions
min(x, y) = x > y ? y : x
max(x, y) = x > y ? x : y
set style data lines
# nice ranges
set xr [-1:5]
set yr [-1:3]
plot 'data.dat' u 0:1 title 'col 1', \
'' u 0:2 title 'col 2', \
'' u 0:(min($1,$2)) title 'min', \
'' u 0:(max($1,$2)) title 'max', \
'' u 0:(min($1,$2) - 0.2):(min($1,$2)) notitle with labels, \
'' u 0:(max($1,$2) + 0.2):(max($1,$2)) notitle with labels
和数据文件:
1 2
2 0
1 2
1 0
0 1
答案 0 :(得分:2)
您必须明确使用sprintf
格式化标签:
plot 'data.dat' u 0:(min($1,$2) - 0.2):(sprintf('%.0f', min($1,$2))) notitle with label
对于某些特殊情况,转换为字符串是自动完成的,但不保证能够正常工作。只有sprintf
才能安全。也可以看看
https://sourceforge.net/p/gnuplot/bugs/1368/有关此行为的更长时间的讨论。