【问题标题】:How to plot piecewise function using data plot in Gnuplot?如何使用 Gnuplot 中的数据图绘制分段函数?
【发布时间】:2014-12-06 18:54:26
【问题描述】:

根据上图。此图片是从文本文件中的数据点生成的。我的问题是,如果图表被跳转,我如何删除任意两点的线? (在我的图片中,该图在 x~260 上跳跃)

请注意,我的目的是我只是想让这个图表看起来像分段函数,这意味着图表中间的线不应该连接,因为它是跳跃的。

【问题讨论】:

    标签: gnuplot piecewise


    【解决方案1】:

    在 gnuplot 中,当您在某处有无效数据值或空行时,您可以将一行拆分为多个部分。

    对于第一种情况,你可以检查using语句内部,如果与前一点的差异太大,则使当前点无效。但这也会让你不仅松开连接线,还会松开跳跃后的第一个点:

    lim=3
    y2=y1=0
    plot 'test.dat' using (y2=y1,y1=$2,$1):($0 > 0 && abs(y2-y1) > lim ? 1/0 : y1) with linespoints
    

    我使用的测试数据文件是

    1 1
    2 1.1
    3 0.95
    4 1
    5 5
    6 6
    7 5.5
    8 5.8
    9 -2
    10 -2.5
    11 -4
    

    如您所见,x=5 和 x=9 处的点丢失了。

    或者,您可以通过awk 等外部工具对数据进行管道过滤以进行过滤。在这种情况下,当两个连续 y 值之间的差异超过某个限制时,您可以插入一个空行:

    filter(lim) = 'awk ''{if(NR > 1 && sqrt((y-$2)**2) > '.lim.') print ""; print; y=$2}'' test.dat'
    plot '< '.filter(3) using 1:2 with lines
    

    请注意,我使用 sqrt((..)**2) 只是为了模拟 awk 没有的 abs 函数。

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多