No gnuplot, como plotar com linhas, mas pular pontos de dados ausentes?


20

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 esses dados no gnuplot com linhas, os pontos de dados estão bem conectados. Infelizmente, em locais com mais de uma semana de pontos de dados podem estar ausentes. O Gnuplot desenha linhas longas nesses intervalos. Como posso fazer com que o gnuplot conecte pontos apenas em dias consecutivos?

As soluções que exigem pré-processamento dos dados são boas, como eu já suavizo 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: exemplo gnuplot


Aqui está uma imagem do problema: i.stack.imgur.com/aYH4N.png (não é possível adicionar imagens à postagem por algum motivo). Quero que a área circulada seja deixada em branco.
Anna

Bem-vindo ao superusuário. Você não pode, porque ainda não obteve reputação suficiente neste site. Se você não estiver satisfeito com minhas alterações, é claro que poderá revertê-las (ou editá-las novamente).
Baarn

Respostas:


16

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

Registros em branco únicos designam descontinuidades em uma plotagem; nenhuma linha unirá pontos separados por registros em branco (se eles forem plotados com um estilo de linha).


1
Obrigado, isso funciona para descontinuidades em todas as séries. E se eu tiver uma descontinuidade em uma série, mas não na outra?
Anna

8
Funcionou colocando traços em vez dos valores.
Anna

Para mim - era uma linha com 2 caracteres espaciais.
3kstc 02/05/19

9

Você pode usar qualquer sequência que não seja um número como valor para os pontos de dados ausentes ou especificar explicitamente uma sequência de dados ausentes usando o set datafile missingcomando

Se você traçar as linhas usando

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

então o Gnuplot deixará uma lacuna.


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 yornothing é chamado, ele retorna o valor de y ou "0/0", dependendo se o valor absoluto da diferença entre x e seu valor anterior excede o limite.

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.