我有一个与每一天相关的价值,例如:
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"
例子:
答案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 函数以按照上述方式处理时间?
谢谢,很感谢你的帮助!
杰乔