No gnuplot, como traçar com linhas, mas pular pontos de dados perdidos?

19

Eu tenho um valor associado a cada dia, como tal:

120530    70.1
120531    69.0
120601    69.2
120602    69.5
# and so on for 200 lines

Ao plotar estes dados no gnuplot com linhas, os pontos de dados são bem conectados. Infelizmente, em locais com mais de uma semana de pontos de dados pode estar faltando. O Gnuplot desenha linhas longas nesses intervalos. Como posso fazer o gnuplot apenas conectar pontos em dias consecutivos?

As soluções que exigem o pré-processamento dos dados são boas, já que eu o aliso com um script.

Aqui está o que eu uso:

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"

Exemplo:

    
por Anna 24.06.2012 / 17:00

3 respostas

15

Coloque um registro vazio (linha em branco) onde não há dados. Dos documentos :

Single blank records designate discontinuities in a plot; no line will join points separated by a blank records (if they are plotted with a line style).

    
por 24.06.2012 / 20:11
9

Você pode usar qualquer string que não seja um número como valor para os pontos de dados ausentes ou especificar explicitamente uma string de dados perdida usando o comando set datafile missing .

Se você planeja as linhas usando

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

então o Gnuplot deixará uma lacuna.

    
por 19.11.2012 / 11:45
2

Você também pode fazer algo assim para criar lacunas automaticamente quando a distância entre os valores x exceder algum limite:

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

Você precisará ajustar os valores iniciais de "anterior" e "atual", e o limite ("7200" no exemplo acima).

A função "yornothing" usa a função "shift" para armazenar um valor anterior de x. Cada vez que se chama yornothing, ele retorna o valor de y ou "0/0", dependendo se o valor absoluto valor da diferença entre x e seu valor anterior excede o limite.

Um valor de 0/0 diz ao gnuplot para ignorar esse ponto.

    
por 28.03.2018 / 19:47

Tags