Como plotar linhas específicas para dois gráficos no Gnuplot?

1

Dados

ID      BlockSize Size      Blocks
-       511.991   241520288  471728
001     511.868   24152000   47184
0001    503.2     241520     480
00001   510.829   2415200    4728
000001  511.360   4782240    9352
0000001 486.935   120760     248
000     511.889   24103840   47088
0000    493.265   193360     392
00000   511.019   2367040    4632
000000  511.262   4830400    9448
0000000 483.4     96680      200

onde eu quero

  • colunas 3: 4 usadas para plotagens
  • plote um gráfico das linhas 2: 6
  • outro de 7:11

Meu início com base neste blogpost

set terminal qt; 
plot "<(sed -n '2,6p' sandboxgp.data)" using 3:4 with lines; 
plot "<(sed -n '7,11p' sandboxgp.data)" using 3:4 with lines;

que lhe dá apenas um gráfico.

Saída de Marco

Eu coloco aqui logscale no eixo y para maior clareza, onde algum código é baseado nesta resposta

set terminal qt; 
plot "<(sed -n '2,6p' sandbox_gp_pure.data)" using 3:4 with linespoints; 
replot "<(sed -n '7,11p' sandbox_gp_pure.data)" using 3:4 with linespoints; 
set logscale y 10; 
set xlabel "Size"; set ylabel "log(Blocks)"; 
set grid xtics ytics mxtics mytics lc rgb 'blue' lt 1, lc rgb 'red' lt 1; set mxtics; set mytics 5; 
set out;

dando

    
por Léo Léopold Hertz 준영 22.07.2015 / 08:10

2 respostas

2

Não use o comando replot , use a vírgula em vez de ,
Como em seu script não vejo razões aparentes para precisar usar o comando replot , sugiro usar diretamente a vírgula , para separar as duas curvas a serem plotadas: plot sin(x), cos(x) por exemplo.

Tome isso como um bom hábito, mas é mais, é diferente em princípio (veja abaixo).
Você pode achar interessante colocar \ como último caractere para dividir uma única linha (observe que é necessário que não haja espaços em branco ou outros caracteres depois). Isso torna o script mais limpo.

# ...
set style data linespoint   # To avoid to repeat it on each line of plot command
                            # Note below no spaces after the '\' 
plot "<(sed -n '2,6p'  sandbox_gp_pure.data)"  using 3:4  \
   , "<(sed -n '7,11p' sandbox_gp_pure.data)"  using 3:4 

Com o comando replot em vez disso você plota novamente cada curva já presente no gráfico (relendo os dados e executando novamente todas as operações seguintes) e somente após você traçar a nova curva.

É um bom hábito porque usando novamente seu roteiro amanhã, você pode ter um desaceleração geral de seu processo de trabalho quando os arquivos são muitos, enormes ou sistema de arquivos remoto; quando você executa operações longas para processar os dados; quando os pontos efetivamente plotados são muitos e você precisa esperar a atualização gráfica da janela ainda mais se você estiver trabalhando através de uma ssh -X connection ...

Além disso, no terminal como pdfcairo com

set terminal pdfcairo;  set output 'my.pdf' ;
  plot    sin(x) 
  replot  cos(x)
set output  ; set terminal qt # or whatever is your default terminal

você obterá um documento de 2 páginas e um arquivo pdf maior.

Nota: Você pode usar a palavra-chave every sem precisar criar subshells () e chamar programas externos, como sed . Se você não puder pré-encomendar eles com um tipo , você pode adicionar smooth unique à trama o conjunto de dados com o estilo linespoints que ama entradas ordenadas pela coordenada x .

plot "sandbox_gp_pure.data" every ::1::5   us 3:4 t "set 1" w linesp \
   , ''                     every ::6::10  us 3:4 t "set 2" w linesp

Ou se você quiser que eles sejam pedidos

plot "sandbox_gp_pure.data" every ::1::5  u 3:4 smooth unique t "set 1" w linesp\
   , ''                     every ::6::10 u 3:4 smooth unique t "set 2" w linesp

Outra vantagem é a portabilidade. Ele funcionará mesmo quando sed não estiver instalado e funcionar mesmo no Windows.
Você pode notar a mudança no número da linha porque começa a partir de 0 .

The first datum in each block is numbered '0', as is the first block in the file.

O gnuplot help replot output:

The replot command without arguments repeats the last plot or splot command. This can be useful for viewing a plot with different set options, or when generating the same plot for several devices.

Arguments specified after a replot command will be added onto the last plot or splot command (with an implied ',' separator) before it is repeated.

    
por 11.11.2015 / 12:56
2

Use replot em vez de plot no segundo gráfico. Então, não substituirá o primeiro gráfico.

# will plot one graph
gnuplot -p -e 'plot sin(x); plot cos(x)'

# will plot two graphs
gnuplot -p -e 'plot sin(x); replot cos(x)'
    
por 22.07.2015 / 08:34

Tags