Gnuplot: como plotar com uma linha contínua em vários blocos de dados?
Eu tenho um arquivo dat que é dividido em vários blocos, por exemplo, como o seguinte:
# Time (s) x (m)
0.0 0.0
1.0 1.0
2.0 2.0
3.0 3.0
4.0 4.0
5.0 5.0
5.0 10.0
6.0 11.0
7.0 12.0
8.0 13.0
9.0 14.0
10.0 15.0
O seguinte script mínimo:
filename = 'test.dat';
set terminal pngcairo size 960, 540 font 'Verdana, 20'
set output "test.png"
unset key
set xlabel "Time (s)"
set ylabel "x (m)"
set grid
set autoscale fix
plot filename u 1:2 w l lw 1.0 lc rgb 'black' notitle
produz esta figura:
O Gnuplot plota duas linhas, uma para cada bloco. No entanto, como os dados x são descontínuos entre os dois blocos, um salto aparece no gráfico.
Eu gostaria de juntar essas duas linhas no gráfico de saída, sem modificar o arquivo de dados. Existe uma maneira de fazer isso?
Talvez isso possa ser feito lendo a última linha de cada bloco e a primeira do próximo bloco e traçando uma linha entre esses dois pontos, mas não estou familiarizado com nenhuma função incorporada que possa fazer o trabalho.
Respostas
A primeira abordagem que me vem à mente é plotar os dados em uma tabela. Isso removerá as linhas vazias. Talvez existam maneiras melhores.
Código:
### remove empty lines in data
reset session
$Data <<EOD # Time (s) x (m) 0.0 0.0 1.0 1.0 2.0 2.0 3.0 3.0 4.0 4.0 5.0 5.0 5.0 10.0 6.0 11.0 7.0 12.0 8.0 13.0 9.0 14.0 10.0 15.0 EOD set table $Data2
plot $Data u 1:2 w table unset table plot $Data2 u 1:2 w l
### end of code
Adição: na verdade, há outra abordagem em uma única linha de código (embora não muito óbvia também) que não duplica os dados na memória (talvez relevante apenas para dados grandes). Você poderia usar o undefine $Dataque eu acho que vai liberar a memória $Data.
O seguinte código de linha única fornecerá o mesmo resultado que o procedimento da tabela acima. Os dados são desenhados como vetores de um ponto de dados para o próximo e, portanto, ignorando também as linhas vazias.
plot x1=y1=NaN $Data u (x0=x1):(y0=y1):(x1=$1,x1-x0):(y1=$2,y1-y0) w vec nohead notitle
Resultado: