如何在gnuplot中绘制具有缺失数据点的折线图

8

例子:

enter image description here

我想画一张和上图类似的图表:一条曲线上有一些缺失数据点,这意味着曲线是不连续的。

我该怎么做?

2个回答

11

这取决于你的数据文件长什么样子。如果在数据文件中插入一个空格,它就不会连接邻近的点(这是最简单的方法):

考虑:

 #datafile
 1 2
 2 3

 4 2
 5 3

然后是用于绘制的脚本:

 plot 'datafile' u 1:2 w linespoints

你可以用其他技巧处理缺失数据:set datafile missing。 这方面的良好参考是内置帮助文档(help missing)。


谢谢,但我的数据文件不仅包含两列。 - ZhenYu Wang
谢谢,但我的数据文件包含许多列,只有其中1列有缺失数据点。因此我不能添加空行,这会导致其他列/行不连续。让我尝试为此列附加一个单独的文件,这可能有效。 - ZhenYu Wang
@CharryWong -- 这就是我回答中提到的 set datafile missing 部分的作用。 - mgilson
2
我尝试过使用“set datafile missing”,但是行仍然是连续的。但最后我弄清楚了,我不能使用“using 5”,我需要使用“using ($5)”。 - ZhenYu Wang
5
请注意,plot 'file'、plot 'file' using 1:2 和 plot 'file' using ($1):($2) 可能存在微妙的差异:1)如果文件中有一些行只有一列,而其他行有两列,则第一个命令会在缺少 x 值时自动生成 x 值,第二个命令会静默地忽略只有一列的行,而第三个命令会为只有一个点的行存储未定义的值(因此,在连线图中,不会连接质量差的点);2)如果一行开头是文本,则第一个命令会因出错而终止绘图,但第二个和第三个命令应该会静默地跳过这行内容。 - ZhenYu Wang
@CharryWong 我认为这应该成为一个单独的答案或编辑到这个答案中。这是一个关键的端口,隐藏在评论中。 - Vladimir F Героям слава

0

对于单个图,使用set datafile missing指定表示缺失值的字符字符串,并使用using $说明符确保gnuplot在缺失值处留下线条间隙。不同的using说明符在gnuplot文档中有描述,用于set datafile missing

当列号被指定为变量时,这就有点棘手了。例如,要绘制文件的多个列,可以使用变量指定列号:

do for [i=2:10] {
    plot 'datafile' using ($1):i with lines
}

然而,如果我们尝试使用$语法,它不起作用:

do for [i=2:10] {
    plot 'datafile' using ($1):($i) # ERROR!
}

解决方案是使用列函数,该函数还会为缺失的值留下空白:

do for [i=2:10] {
    plot 'datafile' using ($1):(column(i)) with lines
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接