Como uso o gnuplot para criar um gráfico de espaço de fase 3D?

3

Dê uma olhada nesta página da Web - fechado, mas não criptografado

For a three-dimensional phase-space plot, the sequence a, b, c, d, e, f, etc. can be used as space coordinates (a-b, b-c, c-d), (b-c, c-d, d-e), (c-d, d-e, e-f), etc. Patterns in the plot created reveal recurring relations between subsequent sequences. In this phase plot, 50,000 16-bit random numbers would produce an unstructured cloud of dots.

Eu quero fazer exatamente o mesmo tipo de coisa. Eu tenho um arquivo binário (cerca de 10 MB) e gostaria de criar alguns gráficos de estilo do gnuplot como eles têm na página da web.

O que eu digito no gnuplot para que isso aconteça?

    
por jecniencikn 26.07.2013 / 18:29

1 resposta

1

  1. Crie um dump do seu arquivo binário em um formato adequado para o gnuplot. Por conveniência, usei hexdump com um formato de saída personalizado, que precisamos armazenar em um arquivo, por exemplo, como gnuplot.hdp (em princípio, a string de formatação pode ser passada por meio de uma opção de linha de comando, mas então vamos nos deparar com muitas citações aninhadas no script do gnuplot):

    $ cat gnuplot.hdp
    3/1 "%03d " "\n"
    
    $ hexdump -f gnuplot.hdp random.data | head -n 4
    236 027 076
    070 243 055
    047 115 211
    184 206 073
    
  2. Plote os dados com o gnuplot. No caso mais simples, plotamos os bytes 1, 2, 3 e 4, 5, 6 etc. como x, y, z coordinates:

    set parametric
    unset border
    unset xtics
    unset ytics
    unset ztics
    splot "< hexdump -f gnuplot.hdp random.data" using ($1):($2):($3) notitle
    

    Um arquivo com números aleatórios mostra - não surpreendentemente - um gráfico de dispersão aleatório:

    Masseusarmos,e.umarquivomalcompactado,comoumbitmapsimples,vemosumaestrutura(aquiéumalinha):

  3. Se quisermos nos assemelhar um pouco melhor ao enredo no artigo citado, precisamos do formato 6/1 "%03d " "\n" as hexdump , para obtermos seis bytes por linha. E nós temos que estender o comando splot no gnuplot:

    splot "< hexdump -f gnuplot.hdp random.data" u ($1-$2):($2-$3):($3-$4) ls 1 not, '' u ($2-$3):($3-$4):($4-$5) ls 1 not, '' u ($3-$4):($4-$5):($5-$6) ls 1 not
    

    gnuplot trata u como uma abreviação de using e not de notitle para manter as coisas pequenas.

    Para o bitmap, obtemos agora um objeto bonito;

    osdadosaleatóriossãoassim:

  4. Esteja ciente de que analisamos os dados em blocos de 6 bytes, ou seja, se apenas o 6º e o 7º byte (ou múltiplos deles) estiverem correlacionados, os gráficos não revelarão isso.

  5. gnuplot deve manipular facilmente um arquivo de entrada de 10 MB, mas especialmente a rotação pode ficar lenta - dependendo do seu poder de computação.

por 03.08.2013 / 16:54