在 gnuplot 中,如何用线条绘图但跳过缺失的数据点?

在 gnuplot 中,如何用线条绘图但跳过缺失的数据点?

我有一个与每一天相关的价值,例如:

120530    70.1
120531    69.0
120601    69.2
120602    69.5
# and so on for 200 lines

在 gnuplot 中用线绘制这些数据时,数据点连接得很好。不幸的是,有些地方可能会缺少超过一周的数据点。Gnuplot 在这些间隔上绘制了长线。我怎样才能让 gnuplot 只连接连续几天的点?

需要对数据进行预处理的解决方案很好,因为我已经用脚本对其进行了平滑处理。

以下是我使用的:

set xdata time
set timefmt "%y%m%d"
plot "vikt_ma.txt" using 1:2 with lines title "first line", \\
     ""            using 1:3 with lines title "second line"

例子: gnuplot 示例

答案1

在没有数据的地方放置一个空记录(空白行)。从文档

单个空白记录表示图中的不连续性;没有线会连接由空白记录分隔的点(如果它们以线条样式绘制)。

答案2

您可以使用任何非数字的字符串作为缺失数据点的值,或者使用命令明确指定缺失数据字符串set datafile missing

如果你使用

plot "vikt_ma.txt" using 1:($2) with lines title "first line"

那么 Gnuplot 将会留下一个空白。

答案3

您还可以执行类似的操作,当 x 值之间的距离超过某个阈值时自动创建间隙:

previous=1
current=1
shift(x) = (previous=current, current=x)
yornothing(x,y) = ( shift(x), abs(x-previous)<7200?y:sqrt(0/0))

plot "file.dat" using 1:(yornothing($1,$2)) with lines

您需要调整“上一个”和“当前”的初始值以及阈值(上例中的“7200”)。

函数“yornothing”使用函数“shift”存储 x 的一个先前值。每次调用 yornothing 时,它都会返回 y 的值或“0/0”,具体取决于 x 与其先前值之间的差的绝对值是否超过阈值。

值 0/0 告诉 gnuplot 忽略该点。

答案4

嘿呀!

您的帖子已经比较旧了,但我也遇到了类似的问题。不过我使用时间数据作为输入(格式如下:),2022-08-01,00:03:03并使用以下设置导入:

   set xdata time
   set timefmt '%Y-%m-%d,%H:%M:%S'
   set format x "%H:%M"

如果时间戳之间的间隔超过 15 分钟,我想跳过行。如何调整 yornothing 函数以按照上述方式处理时间?

谢谢,很感谢你的帮助!

杰乔

相关内容