gnuplot: valores e definições de variáveis ​​no comando plot

Sep 24 2020

Acabei de descobrir o seguinte:

De acordo com o manual do gnuplot, um elemento do gráfico pode conter uma definição.

Syntax: 

      plot {<ranges>} <plot-element> {, <plot-element>, <plot-element>}

Each plot element consists of a definition, a function, or a data source 
together with optional properties or modifiers: 

      plot-element:
           {<iteration>}
           <definition> | {sampling-range} <function> | <data source>
                        | keyentry
           {axes <axes>} {<title-spec>}
           {with <style>}

Verifique o seguinte exemplo:

  • Pois o primeiro gráfico y=x+1é traçado porque a=1foi definido anteriormente. Como esperado.

  • Para o segundo gráfico e o primeiro comando de plotagem, deve ser o mesmo, mas ao y=2*x+1invés disso é plotado (duas vezes).

  • No terceiro gráfico, quando a=1é especificado explicitamente, ele é plotado conforme o esperado.

Por que o gnuplot está ignorando a=1para o segundo gráfico? Eu entendi mal alguma coisa?

Código:

### definitions in plot command
reset session

a = 1
b = 1
f(x) = a*x + b

set yrange[-40:40]
set multiplot layout 1,3
    plot     f(x)
    plot     f(x), a=2 f(x), a=3 f(x)
    plot a=1 f(x), a=2 f(x), a=3 f(x)
unset multiplot
### end of code

Resultado:

Respostas

4 Ethan Sep 24 2020 at 11:29

Seu diagnóstico está ligeiramente errado. No segundo painel, o primeiro gráfico roxo é sobreposto com o gráfico a = 3 ao invés do gráfico a = 2.

Por quê? Porque o gnuplot acumula todos os elementos do gráfico completo antes de realmente desenhar qualquer um deles. Isso envolve fazer duas passagens na linha de comando. Uma passagem para analisar e carregar dados de qualquer fonte de dados mencionada (necessária, por exemplo, para escalonamento automático) e, em seguida, uma segunda passagem para avaliar quaisquer funções no intervalo (que pode ter sido determinado pelo escalonamento automático). Durante a primeira passagem aqui, a é definido para 2 e depois para 3. No início da segunda passagem, a ainda é 3 e na ausência de uma definição inicial para alterá-lo, é o que é usado quando f (x) é avaliado .