Comparação e plotagem de dados no gnuplot

1

Os dados que tenho estão neste formato no arquivo de texto:

#REY2_0  REY1_0  alpha1     alpha2   omega

100      200    (-0.1,0)    (1,0)   (0.94379237,-0.052310783)

A lista de valores é bastante longa. Eu preciso encontrar os valores de REY2_0 e REY1_0 para o qual o valor da segunda parte do omega é 0 (por segundo eu significaria o valor -0,052310783 no caso acima). Posso usar o gnuplot para fazer esta operação de busca e plotar REY2_0 v / s REY1_0? Além disso, como a maioria dos valores não são exatamente zero, eu também gostaria de obter valores de REY2_0 e REY1_0 para os quais os primeiros três dígitos são zero (ou seja, são da forma 0.000xxxxxx)

    
por Abhishek Kumar 09.06.2014 / 09:17

1 resposta

0

Vamos limpar seus dados antecipadamente de ( e ) . O comando do linux sed é uma boa opção ( column -t dará um bom formato)

  sed 's/[(,)]/\t/g' data.dat | column -t > data02.dat

em que supomos que seu arquivo original tenha o nome data.dat e que criemos um novo arquivo chamado data02.dat . O novo arquivo terá 8 colunas. Em gnuplot você pode acessar uma única coluna com a opção using ($1):($8) para usar dados da primeira coluna como x e dados da oitava coluna para o y .

Agora o truque : define uma função que responderá com y se estiver satisfeito com uma condição, e com mais infinito se for não. Isso porque o gnuplot pula o y com valores infinitos. Então, em gnuplot você pode escrever

myf(y,t)= t == 0 ? y : 1.0/0.
plot 'data2.dat' us ($1):(myf($2,$8))

Claro que você pode fazer isso de uma forma mais compacta, mas para escrever isso, é mais compreensível.

Para a segunda questão, é possível definir uma condição diferente na função

myf2(x,y)= ( 0.001 > abs(x) ) && ( 0.001 > abs(y) ) ? y : 1.0/0
plot 'data2.dat' us ($1):(myf2($1,$2))

em que abs(x) retorna o valor absoluto de um número (o número sem um sinal).

Nota: ok eu estava com preguiça em vez de using escrevo apenas us . Gnuplot entende isso.

    
por 12.07.2014 / 15:11

Tags