Gnuplot绘制带有变化距离的标记点

时间:2017-04-21 12:43:32

标签: plot label gnuplot

我正在尝试从包含时间戳的文件中绘制一些数据,并将注释作为字符串和各种其他数据。

到目前为止,为了将所有评论作为标签与时间一起绘制,我正在寻找某种智能间距,以便评论不重叠。

我也在寻找一种过滤评论的方法。我有另一列,指定评论是否应该隐藏。我在conditional plotting使用此声明:

plot 'data' using $1:0:($7==0?$6:" ")

它正在过滤数据点,但如果Statment为true,它不会显示($ 6)中的字符串,而是显示0。

我认为如果距离太小,我可以通过手动操作时间来处理间距,但是工作过滤器会有很大的帮助。

之前有没有人处理过这类问题?到目前为止,我在下面添加了一张图片。

我感谢任何建议。谢谢。

Plot

2 个答案:

答案 0 :(得分:0)

为了使您的标签不重叠,如何使用rotate by -60向下旋转它们?

默认的底部边距会将它们剪掉,在这种情况下,您需要使用set bmargin 10之类的内容展开它。

要有条件地绘图,当条件为假时,您需要生成数值错误,而不仅仅是零值。最简单的方法可能是:

plot 'data' using $1:0:($7==0?$6:NaN)

虽然在较旧的脚本中,人们经常会看到1/0用于生成NaN,如:

plot 'data' using $1:0:($7==0?$6:1/0)

您可以设置显式标签,而不是条件绘图,如:

set xdata time
set timefmt "%d/%m/%y\t%H%M"
set format x "%d/%m\n%H:%M"
set xrange [ "1/6/93":"1/11/93" ]
set grid
set style data fsteps
set bmargin 10
set label 1 'Look at the spike here' at '01/10/93',0.05 rotate by -45 point
# https://github.com/gnuplot/gnuplot/blob/master/demo/timedat.dat
plot 'timedat.dat' using 1:4 notitle

那产生了 resulting plot

答案 1 :(得分:0)

要在using表达式中使用文本字段,必须使用stringcolumn函数。对于你的例子,像

plot 'data' using $1:(0):($7==0 ? stringcolumn(6) : " ") with labels

应该适用于您问题的过滤方面。