2017-04-21 34 views
0

我试图从包含时间戳和注释作为字符串和各种其他数据的文件中绘制一些数据。Gnuplot用变化的距离绘制带标记的点

到目前为止,最令人兴奋的是将所有评论与时间标记为标签,但我正在寻找某种智能间隔,以便评论不重叠。

我还在寻找过滤评论的方法。我有另一个栏目,指定评论是否应该隐藏。我使用这个Statment为conditional plotting

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

它过滤数据点,但不是显示字符串($ 6)它显示0,如果Statment是真实的。

我想我可以通过手动操作时间来解决间距问题,如果距离太小,但工作过滤器会有很大的帮助。

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

我欣赏任何建议。谢谢。

Plot

回答

0

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

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

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

+0

完美地工作!随着有条件的标签绘制,间距不再那么重要,因为评论量急剧减少。非常感谢你的帮助! –

0

为了使您的标签不重叠,那旋转下来,并进行与rotate by -60的方式吗?

默认的底部边距会将它们关闭,在这种情况下,您需要使用类似set bmargin 10的东西来扩大它。

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

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

虽然在老脚本常常可以看到一些用于生成NaN1/0,如:

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

+0

不知何故gnuplot不喜欢与条件绘图相结合的字符串输出。使用明确的标签是一个不错的选择,但评论的数量可能还会增加。感谢您的回复 –