为什么gnuplot标记最小/最大值错误?

时间:2016-04-13 20:37:35

标签: gnuplot

我正在创建一个图,其中我标记了双时间序列的最小值和最大值。

我这样做是通过定义minmax函数,并在每个时间点绘制每个系列以及更高和更低值的标签。标签向上和向下偏移,因此不会与线条重叠。

broken plot

请注意,无论第一列或第二列中的值是否更高,标签始终是第二列中的值。

主要问题似乎是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

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/有关此行为的更长时间的讨论。