【问题标题】:Gnuplot plotting labeled points with changing distanceGnuplot 绘制距离变化的标记点
【发布时间】:2017-04-21 12:43:32
【问题描述】:

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

到目前为止的工作是将所有 cmets 绘制为时间标签,但我正在寻找某种智能间距,以便 cmets 不会重叠。

我也在寻找一种过滤 cmets 的方法。我得到了另一列,它指定评论是否应该被隐藏。我将这个声明用于conditional plotting

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

它正在过滤数据点,但不是在 ($6) 中显示字符串,而是在 Statment 为真时显示 0。

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

以前有人处理过这种问题吗?我在下面添加了一张我到目前为止进展的图片。

感谢任何建议。谢谢。

Plot

【问题讨论】:

    标签: plot label gnuplot


    【解决方案1】:

    要在using 表达式中使用文本字段,必须使用stringcolumn 函数。对于您的示例,类似

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

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

    【讨论】:

    • 完美运行!使用条件标签绘制间距不再那么重要,因为 cmets 的数量大大减少了。非常感谢您的帮助!
    【解决方案2】:

    为了使您的标签不重叠,使用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
    

    产生

    【讨论】:

    • 不知何故,gnuplot 不喜欢将字符串输出与条件绘图结合使用。使用显式标签是一个不错的选择,但 cmets 的数量可能还会增加。谢谢您的回复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多