默认情况下,gnuplot用直线替换曲线,缺少数据。有没有办法改变这个范围的线型?例如。整条曲线用连续线打印,而缺失的数据用虚线代替?
答案 0 :(得分:1)
set datafile missing "?"
set term wxt dashed
plot "1.txt" using ($1):($2) with lines title "line", "<grep -A1 -B1 '?' 1.txt" w lines lt 2 lc 1 title "missing"
:~$ cat 1.txt
1 2
2 3
3 9
4 ?
5 6
6 7
将缺失的数据标记为?
。
using ($1):($2)
会遗漏错过的数据(图中的空格)。
执行grep
选择一系列数据,包括-A1
之前的一行和-B1
?
之后的一行,这是用dashed
行绘制的(lt 2
)
:~$ cat 1.txt
1 2 3
2 3 ?
3 9 5
4 ? 2
5 6 7
6 7 4
将最后gnuplot
命令更改为:
plot for [i=1:2] "1.txt" using ($1):(column(i+1)) with lines lt 1 lc i title "line".i, for [i=1:2] "<awk -v u=$((".i."+1)) '{printf $1\" \";print $u}' 1.txt | grep -A1 -B1 '?'" using 1:2 w lines lt 2 lc i title "missing".i
for [i=1:2]
是gnuplot
次迭代(循环),两次(带三列的文件)。将2
更改为column count - 1
。
要评论的另一件事是"<awk -v u=$((".i."+1)) '{printf $1\" \";print $u}' ..."
:这里我们在""
中包含shell命令,并将字符串与.
连接起来
这是一种将gnuplot i
变量传递给执行的shell的方法 - 我们将一个字符串与awk
命令的第一部分和i
以及{{{}的第二部分连接起来。 1}}命令。
我们每次都会打印到文件列:第一个 - awk
和printf $1
st(又名i+1
&#39; th,我们将其作为参数传递给{{ 1}})。
u
只是一个空格,双引号应该被转义。