在gnuplot中,如何用线绘制但跳过缺少的数据点?


20

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

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示例


这是问题的图片:i.stack.imgur.com/aYH4N.png(由于某种原因无法在帖子中添加图片)。我希望带圆圈的区域留为空白。
2012年

欢迎使用超级用户。您之所以不能,是因为您在该站点上尚未赢得足够的声誉。如果您对我的更改不满意,则可以恢复(或再次编辑)。
Baarn

Answers:


16

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

单个空白记录表示情节中的不连续性;没有线将连接由空白记录分隔的点(如果使用线型绘制)。


1
谢谢,这适用于所有系列的不连续性。如果我在一个系列中有一个间断而不是另一个,那该怎么办?
2012年

8
它通过使用破折号代替值来工作。
2012年

对我来说-这行有2个空格字符。
3kstc '16

9

您可以使用不是数字的任何字符串作为缺少的数据点的值,或使用set datafile missing命令显式指定缺少的数据字符串。

如果然后使用

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

然后Gnuplot会留下空白。


2

您还可以执行以下操作以在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忽略该点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.