Buscar

Introdução ao GNUPLOT

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

Introdução ao GNUPLOT
Prof. Ricardo Reis
16 de abril de 2014
1 Introdução
Gnuplot é um software livre para desenho (plotagem) de funções em
duas e três dimensões (2D e 3D). A última versão estável até a escrita
deste documento é a 4.4.0. Versões em binário (pronto para instala-
ção) e em código fonte (precisam ser compiladas e depois montadas
no sistema) tanto para windows como para linux estão disponíveis no
endereço,
http://sourceforge.net/projects/gnuplot/files/
(na parte inferior do site é possível fazer o download da versão que
condiz com seu sistema).
2 Prompt de Entrada
Depois de instalado o gnuplot poderá ser executado. Se o sistema criar
um ícone de atalho basta acioná-lo com o mouse. Do contrário uma ja-
nela de terminal (modo de entrada onde as ações são dadas digitando-
se comandos) deverá ser executada (no linux há atalhos nos menus do
sistema – no Ubuntu utilize Aplicativos→Acessórios→Terminal – e
no Windows use iniciar→executar e digite cmd depois OK). O gnuplot
deverá ser executado digitando-se gnuplot no terminal aberto, como no
exemplo (linux),
$ gnuplot
No Windows existe uma versão .zip que, após descompactada, está
pronta para uso. Basta ir na subpasta binary e clicar em gnuplot.exe.
Em qualquer caso uma janela de terminal abrirá e exibirá um conteúdo
semelhante a,
G N U P L O T
Version 4.4 patchlevel 0
last modified March 2010
System: Linux 2.6.32-24-generic
Copyright (C) 1986-1993, 1998, 2004, 2007-2010
Thomas Williams, Colin Kelley and many others
1
gnuplot home: http://www.gnuplot.info
faq, bugs, etc: type "help seeking-assistance"
immediate help: type "help"
plot window: hit ’h’
Terminal type set to ’wxt’
gnuplot>
A última linha, gnuplot>, é denominada prompt de entrada e aguarda
por entrada do usuário. Quando uma entrada está completa pressiona-
se <ENTER>, gnuplot executa a ação e volta para o prompt para aguar-
dar nova entrada. Exemplo,
gnuplot> plot sin(x)
gnuplot>
A entrada plot sin(x) é dada e depois de executada o gnuplot volta,
na linha seguinte, para o prompt onde nova entrada será aguardada.
Um terminal gráfico abrirá noutra janela e exibirá o gráfico ao lado.
3 Terminais Gráficos
Chama-se terminal gráfico a janela auxiliar que o gnuplot abre para
exibir um gráfico. Há tantos terminais gráficos disponíveis em sua
máquina quanto forem instalados (o gnuplot instala alguns para você).
Para visualizar uma lista completa de terminais gráficos digite,
set term
Isso exibirá uma lista dos terminais gráficos disponíveis. Normalmente
o terminal gráfico padrão do gnuplot é o wxt. Esta informação é exibida
quando você executa o gnuplot (veja na listagem anterior),
Terminal type set to ’wxt’
Para saber detalhes do terminal ativo digite test e veja o que aparece
na saída gráfica.
4 Plotando Gráficos em 2D
O nome padrão da variável independente em gnuplot é x. Assim para
plotar um gráfico a partir de uma função, deve-se usar um nome de
função válida com argumento x. As principais funções matemáticas
do gnuplot são listadas na tabela a seguir,
2
Função Retorna
abs(x) valor absoluto de x
acos(x) arco-cossenno de x
asin(x) arco-sene de x
atan(x) arco-tangente de x
cos(x) cosseno de x, x em radianos.
cosh(x) cosseno hiperbólico de x, x em radianos
erf(x) funçao erro de x
exp(x) exponencial de x, base e
inverf(x) erro inverso de x
invnorm(x) distribuição inversa normal de x
log(x) log de x, base e
log10(x) log de x, base 10
norm(x) distribuição normal Gaussiana de x
rand(x) gerador de números pseudo-aleatórios
sgn(x) 1 se x > 0, -1 se x < 0, 0 se x = 0
sin(x) seno de x, x em radianos
sinh(x) seno hiperbólico de x, x em radianos
sqrt(x) raiz quadrada de x
tan(x) tangente de x, x em radianos
tanh(x) tangente hiperbólica de x, x em radianos
O comando gnuplot para plotagem 2D é plot. Por exemplo, para plotar
a função seno usa-se,
gnuplot> plot sin(x)
gnuplot>
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
-10 -5 0 5 10
sin(x)
isso desenhará no terminal gráfico a função seno. Para alterar o do-
mínio de plotagem (intervalo nas abcissas onde deverá ser plotada a
função), utiliza-se um par de colchetes contendo respectivamente os
limites inferior e superior de abcissas, separados por dois-pontos. Para
plotar, por exemplo, o seno entre 0 e pi faz-se,
gnuplot> plot [0:pi] sin(x)
gnuplot>
3
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
0 0.5 1 1.5 2 2.5 3
sin(x)
onde pi é o valor de pi no gnuplot. A saída é mostrada na figura ao lado.
Há algumas situações em que o intervalo nas ordenadas precisa tam-
bém ser especificado. Neste caso utiliza-se outro par de colchetes se-
guidos do p rimeiro utilizando a mesma sintaxe já apresentada. No
exemplo,
gnuplot> plot [-10:10] [-3:3] x*x
gnuplot>
-3
-2
-1
0
1
2
3
-10 -5 0 5 10
x*x
o intervalo nas abcissas restringe-se entre -10 e 10 ao passo que nas
ordenadas entre -3 e 3. Caso se deseje identificar apenas o intervalo
nas ordenadas deve-se dispor também os colchetes referentes às abcis-
sas, mas neste caso sem limites, como no exemplo,
gnuplot> plot [:] [-3:3] x*x
gnuplot>
4
-3
-2
-1
0
1
2
3
-10 -5 0 5 10
x*x
Para desenhar mais de uma função em gnuplot, separe as funções por
vírgula. Exemplo,
gnuplot> plot [-10:10] x**2 + 5*x - 4, 9*x-11
gnuplot>
-150
-100
-50
0
50
100
150
-10 -5 0 5 10
x**2 + 5*x - 4
9*x-11
onde ** é o operador de potência. São operadores aritméticos legais em
gnuplot,
Operador O Que Faz
+ Soma
- Subtração
* Multiplicação
/ Divisão
% Resto de divisão de inteiros
** Potência
O resultado do exemplo anterior será a plotagem das funções f(x) =
x2 + 5x− 4 e g(x) = 9x− 11 e no intervalo de -10 a 10.
5 Estilos de Curvas
Cada curva plotada em gnuplot possui um estilo. Um estilo é em geral
formado por um conjunto de propriedades gráficas que incluem, para
5
o caso de curvas, cor, espessura, tamanho e forma dos pontos, padrão
de linha e etc. Usando o comando test é possível ver, para o terminal
vigente, os valores de espessura, padrões de linha, cores e formas de
pontos disponíveis. Consideraremos neste artigo apenas a cor e a es-
pessura das curvas.
Para modificar a cor de uma curva use os modificadores linecolor (ou
simplesmente lc) e rgb em sequencia seguidos de um valor de cor válida
entre aspas duplas. Exemplo,
gnuplot> plot [0:5] exp(x) lc rgb "red"
0
20
40
60
80
100
120
140
160
0 1 2 3 4 5
exp(x)
A função é plotada com linha de cor vermelha. Para ver a lista de cores
disponíveis no gnuplot use,
gnuplot> show colornames
Cada cor desta lista é apresentada com seu equivalente em hexadeci-
mal (inicia com #) e podem ser utilizadas com mesmo efeito.
O modificar de espessura de linha é linewidth (ou simplesmente lw). Ele
é seguido do índice de espessura (não do valor!) oferecido pelo terminal
gráfico (use o comando test e veja os valores de índice válidos). Por
exemplo, para plotar a função no intervalo de 10 a 100, com cor azul e
espessura de índice 4 use,
gnuplot> plot [10:100] log(5*x-7) lc rgb "blue" lw 4
gnuplot>
6
3.5
4
4.5
5
5.5
6
6.5
10 20 30 40 50 60 70 80 90 100
log(5*x-7)
Caso mais de um gráfico esteja presente, deve-se definir os estilos um
a um. Se caso uma das funções listadas não especifique o estilo, o
gnuplot utilizará o padrão. Veja o exemplo,
gnuplot> plot [3:10] 1/(x**2-1) lc rgb "blue" lw 4, x/20 lc rgb "red" lw 3
0
0.05
0.1
0.15
0.2
0.25
0.3
0.35
0.4
0.45
0.5
3 4 5 6 7 8 9 10
1/(x**2-1)
x/20
isto plota duas funções respectivamente com cores azul e vermelha e
espessuras de índices 4 e 3.
Caso se queira um estilo comum de linha para todas as curvas, existe
a opção de definir um estilo próprio e depois aplicá-lo às curvas. Paradefinir um novo estilo de linha use o esquema geral,
set style line <índice> <opções do estilo>
o valor de índice é um número definido pelo usuário e é usado para
invocar o estilo quando a plotagem for solicitada. As opções de estilo
incluem espessura, cor, tamanho e forma de pontos, padrão de linha
entre outras. A definição de um estilo passa a valer a partir do ponto
que ele é definido. Para invocar um estilo novo, use linestyle (ou sim-
plesmente ls) seguido do índice definido anteriormente. Exemplo,
gnuplot> set style line 7 lw 3 lc rgb "blue"
gnuplot> plot sin(x) ls 7, cos(x) ls 7
gnuplot>
7
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
-10 -5 0 5 10
sin(x)
cos(x)
Isso define um estilo de linha de índice 7 e atribui a ele cor azul e
espessura de índice 4. Os gráficos plotados logo em seguida invocam
com ls 7 (cada um!) o estilo definido.
6 Configurando com set
O comando set tem sido usado sem maiores explicações. De fato ele
tem larga aplicação no gnuplot configurando estados do programa an-
tes de realizar uma plotagem. Usando help set o gnuplot imprime
uma lista de entidades que podem ser configuradas por set. Para des-
fazer uma ação de set usa-se o comando unset. A seguir apresentamos
a configuração de algumas entidades com set/unset.
6.1 set title, set xlabel, set ylabel
Caso o gráfico precise de um título utiliza-se set title. No exemplo,
gnuplot> set title "minha funcao"
gnuplot> plot x**2-1
gnuplot>
-10
0
10
20
30
40
50
60
70
80
90
100
-10 -5 0 5 10
minha funcao
x**2-1
o título minha funcao é impresso no topo do gráfico. Similarmente
rótulos podem ser definidos para os eixos coordenados x e y respecti-
vamente utilizando set xlabel e set ylabel. No exemplo,
8
gnuplot> set title "crescimento de bacterias"
gnuplot> set xlabel "t(s)"
gnuplot> set ylabel "Q(g)"
gnuplot> plot [0:6] 0.3*exp(x)
gnuplot>
0
20
40
60
80
100
120
140
0 1 2 3 4 5 6
Q(g)
t(s)
crescimento de bacterias
0.3*exp(x)
6.2 set angles
O padrão de ângulos em gnuplot é radianos. Para mudar para graus
use set angles degrees. Para trazer de volta, use unset angles ou
set angles radians. Veja o exemplo,
gnuplot> set angles degrees
gnuplot> print sin(90)
1.0
gnuplot> unset angles
gnuplot> print sin(90)
0.893996663600558
gnuplot> print sin(pi/2)
1.0
gnuplot>
onde print é um comando de impressão de qualquer valor numérico
ou texto dentro do gnuplot (você expressa texto em gnuplot colocando-
o entre aspas duplas. Exemplo, print “ola mundo”, imprimirá olá
mundo).
6.3 set size
As plotagens no terminal gráfico acontecem dentro de uma área restrita
por um retângulo que contém marcas numéricas em duas de suas qua-
tro bordas e que indicam valores nas abcissas e ordenadas das funções
plotadas. A proporção entre a altura e a largura deste retângulo, conhe-
cido como aspect-ratio, se mantém quando a janela é redimensionada
impedindo a deformação do gráfico. O valor padrão de aspect-ratio é de
1 para 1 (aspect-raio = 1/1 = 1). O aspect-ratio pode entretanto ser mo-
dificado utilizando set size. Utilize set size square para aplicar o
9
aspect-rato padrão (square, significa quadrado cuja a proporção de di-
mensões é de 1 para 1). Para valores personalizados de aspect-ratio
deve ser usada uma razão de proporção da altura pelo comprimento
do retângulo que poderá ser fornecida de duas formas. Primeiro como
fração onde o numerador e o denominador são fornecidos separados
por vírgulas. Exemplo,
gnuplot> set size 2, 5
gnuplot>
Isso causará ao retângulo de plotagem proporção de 2 para 5 entre al-
tura e largura. Na segunda forma usa-se o modificador ratio seguido
do valor de razão direta. O caso anterior pode ser reescrito como,
gnuplot> set size ratio 0.4
gnuplot>
haja vista que 2/5 = 0.4.
Chamar unset size tem mesmo efeito que set size square.
6.4 set key
Gráficos em gnuplot mantêm uma legenda contendo referências para
cada curva plotada. Cada referência é formada por uma linha horizon-
tal na cor da linha referenciada acompanhada da equação da função.
O comando set key configura legendas em gnuplot. Use help set
key para ver todas as opções. Para desligar legendas use unset key
ou set key off. Para reabilitá-las use set key on.
6.5 set multiplot
Há situações em que gráficos distintos devem compartilhar a mesma
janela ficando vizinhos uns dos outros. Para fazer isso utilize set
multiplot. Este comando define um layout de células que conterão
cada qual uma plotagem independente. A proporção que chamadas a
plot vão sendo realizadas (após definição do layout), células vazias vão
sendo preenchidas ate que a tela encha (novas chamadas a plot não
têm mais onde plotar). Para limpar a tela deve-se encerrar o modo de
multiplotagem usando unset multiplot e depois o comando clear.
Para definir um layout de quantidade fixa de linhas e colunas use o
modificador layout do comando multiplot seguindo a sintaxe,
set multiplot layout <numero de linhas>, <numero de colunas>
No exemplo,
gnuplot> set multiplot layout 2, 2
multiplot> plot [-pi:pi] x**2
multiplot> plot [-pi:pi] sin(x)
multiplot> plot [-1:1] [-5:5] 1/x
multiplot> plot [-1:1] [-5:5] x**3
multiplot> unset multiplot
gnuplot>
10
Inicializa o modo de multiplotagem com 2 linhas e 2 colunas (Observe
que quando multiplot é chamado ocorre uma mudança do prompt
gnuplot> para multiplot>). A saída obtida será,
0
1
2
3
4
5
6
7
8
9
10
-3 -2 -1 0 1 2 3
x**2
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
-3 -2 -1 0 1 2 3
sin(x)
-4
-2
0
2
4
-1 -0.5 0 0.5 1
1/x
-4
-2
0
2
4
-1 -0.5 0 0.5 1
x**3
As chamadas seguintes,
gnuplot> set multiplot layout 1, 2
multiplot> set style line 7 lw 3 lc rgb "blue"
multiplot> plot [-pi:pi] x**2 ls 7, sin(x) ls 7
multiplot> plot [-1:1] [-5:5] 1/x ls 7, x**3 ls 7
-2
0
2
4
6
8
10
-3 -2 -1 0 1 2 3
x**2
sin(x)
-4
-2
0
2
4
-1 -0.5 0 0.5 1
1/x
x**3
apesar de plotarem quatro curvas, só usam duas células. Isso ocorre
poque apenas duas chamadas a plot são realizadas. Cada uma das
11
duas células utilizadas conterá duas curvas.
6.6 set parametric
Para habilitar o modo de uso de equações paramétricas use set parametric.
Para desligá-lo use unset parametric. Neste modo a variável inde-
pendente é t (não é mais x!) e cada curva precisa de uma par de
equações (a primeira x(t) e a segunda y(t)). Por exemplo para plotar
um círculo em gnuplot use,
gnuplot> set parametric
dummy variable is t for curves, u/v for surfaces
gnuplot> plot sin(t), cos(t)
gnuplot>
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
-1-0.8-0.6-0.4-0.200.20.40.60.81
sin(t), cos(t)
A mensagem exibida pelo gnuplot após a configuração do modo para-
métrico indica que a variável independente mudou de nome.
Para plotar mais de uma curva em modo paramétrico deve-se formar
pares de funções e formatar apenas a segunda de cada (caso um novo
estilo seja necessário). Exemplo,
gnuplot> plot [-pi:pi] sin(t), cos(t) lc rgb "black", t**2, t lc rgb "black"
gnuplot>
-4
-3
-2
-1
0
1
2
3
4
-2 0 2 4 6 8 10
sin(t), cos(t)
t**2, t
12
6.7 set polar
Para alternar para o modo polar use set polar. Para sair do modo
polar use unset polar. No modo polar uma coordenada é marcada
por uma valor de raio e um ângulo traçados a partir da origem. O raio é
a variável dependente e o ângulo a independente (exemplo, r(θ) = sin(θ)
denota uma função em coordenadas polares, onde r denota o raio e θ o
ângulo). A variável independente em gnuplot no modo polar é t. Para
plotar uma rosa de três pétalas use,
gnuplot> set polar
dummy variable is t for curves
gnuplot> plot sin(3*t)
1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
1 0.8 0.6 0.4 0.2 0 0.20.4 0.6 0.8 1
sin(3*t)
7 Definindo Variáveis e Funções
Para definir uma variável em gnuplot basta atribuir um valor ao nome
da nova variável. Exemplo,
gnuplot> w = 45
gnuplot> a = 45
estas chamadas criam as variáveis w e a. Variáveis podem ser definidas
também a partir do valor de outras variáveis já definidas. Exemplo,
gnuplot> max = 56.0
gnuplot> min = 24.4
gnuplot> med = (max+min)/2
gnuplot>
Para saber o conteúdo de uma variável já definida, use print. Exem-
plo,
gnuplot> print med
40.2
gnuplot>
13
Para definir uma função em gnuplot deve-se criar um identificador,
pósfixá-lo de um par de parênteses contendo as variáveis independen-
tes e por fim igualá-la a uma equação válida da varável independente
definida. Exemplo,
gnuplot> f(x) = sqrt(x**2 - 5)
gnuplot>
Isso define a função f(x) =
√
x2 − 5. Para plotar essa função usamos,
gnuplot> plot f(x)
Outros recursos do gnuplot podem também ser utilizados,
gnuplot> plot [-10:10] f(x) lc rgb "green" lw 2
0
1
2
3
4
5
6
7
8
9
10
-10 -5 0 5 10
f(x)
Apesar de x ser o identificador padrão para a variável independente, a
definição de uma função pode lidar com qualquer identificador, como
em,
gnuplot> f(a) = sqrt(a**2 - 5)
gnuplot>
Entretanto para plotar a função deve-se chamar plot f(x) o que fará
x tomar o valor de a. Não esqueça que o gnuplot define x como variável
independente e é ele quem deve estar presente na expressão final da
função a ser plotada.
Para definir uma função de mais de uma variável, liste-as entre os
parênteses da definição da função separando-as por vírgulas. Exemplo,
gnuplot> pot(a,b) = exp( b*log(a) )
gnuplot>
Isso define a função pot. Para testar a nova função use,
gnuplot> print pot(2, 3)
8.0
gnuplot>
14
Para construir um plot 2D com funções de mais de uma variável in-
dependente deve-se naturalmente repassar o x para apenas um dos
argumentos e os demais devem receber valores constantes. No exem-
plo,
gnuplot> pot(a,b) = exp(b*log(a))
gnuplot> set style line 9 lw 3 lc rgb "red"
gnuplot> plot [0:8] pot(2, x) ls 9, pot(x, 2) ls 9
as funções plotadas são respectivamente 2x e x2.
0
50
100
150
200
250
300
0 1 2 3 4 5 6 7 8
pot(2, x)
pot(x, 2)
8 Operador Ternário de Decisão
O operador ternário ?: (a interrogação e os dois-pontos constituem
este operador) no gnuplot permite construir estruturas condicionais.
Ele forma uma expressão de três termos de modelo geral,
<exp1> ? <exp2> : <exp3>
Caso o resultado de exp1 (que deve sempre resultar em verdadeiro ou
falso) seja verdadeiro, o resultado final da expressão como um todo
será exp2 e do contrário exp3. No exemplo,
gnuplot> w = 45
gnuplot> q = w>10 ? 9 : 11
gnuplot> print q
9
gnuplot>
a expressão w>10 retorna verdadeiro pois w foi inicializado com 45. Daí
q recebe 9 e não 11. O operador >(maior que) é denominado um opera-
dor relacional e w>10 uma expressão relacional (porque vale verdadeiro
ou falso). Os operadores relacionais do gnuplot são,
15
operador significado
> maior que
< menor que
>= maior ou igual
<= menor ou igual
== igual
!= diferente
O operador ?: também pode ser usado em definições de funções em
partes. Para definir a função em parte,
f(x) =
{ −x x < 0
x2 x ≥ 0
use,
gnuplot> f(x) = x<0 ? -x : x**2
gnuplot> plot [-5:5] f(x)
gnuplot>
0
5
10
15
20
25
-4 -2 0 2 4
f(x)
isso plotará um gráfico que é parcialmente linha, parcialmente pará-
bola. Se mais que duas equações comporem a função em partes, como
em,
f(x) =

−10− 2x x < −5
25− x2 −5 ≤ x ≤ 5√
x− 5 x > 5
use associações do operador ?:. A função h(x) anterior é plotada
usando,
gnuplot> set key off
gnuplot> h(x) = x<-5 ? -10-2*x: (x<=5 ? 25-x**2 : 8*sqrt(x-5))
gnuplot> plot [-10:10] [-10:30] h(x) lc rgb "black" lw 2
16
-10
-5
0
5
10
15
20
25
30
-10 -5 0 5 10
9 Usando Laços
Considere a funçãoque deve ser plotada para oito valores de a distintos
e equidistantes no intervalo {2, 25}. Estes oito valores podem ser obti-
dos por a(i) = 2 + 3 i−17 , onde i é um inteiro no intervalo {1, 8}. Desta
forma as oito curvas se distinguirão unicamente por um valor de i e
poderão ser plotadas num laço de contagem. A estrutura de uma plo-
tagem com laço de contagem em gnuplot tem formato geral,
plot for [<contador>=<minimo>:<maximo>] <funcao_de_x_e_do_contador>
Para plotar as oito curvas do modelo descrito anteriormente use,
gnuplot> a(i) = 2.0 + 3.0*(i-1)/7
gnuplot> f(x,a) = a*x**2 - 5*x + 7
gnuplot> plot for [i=1:8] f(x, a(i) ) lc rgb "black" lw 2
gnuplot>
0
100
200
300
400
500
600
-10 -5 0 5 10
Apesar do identificador a ser usado na definição da função a(i) e no
segundo argumento de f(), tratam-se de coisas diferentes. Na plotagem
propriamente dita, de contador i e limites 1 e 8, a chamada à f() invoca
internamente a(i) para repassar seu valor ao argumento a. Remode-
lando as variáveistem-se,
17
gnuplot> a(i) = 2.0 + 3.0*(i-1)/7
gnuplot> f(u,c) = c*u**2 - 5*u + 7
gnuplot> plot for [i=1:8] f(x, a(i) ) lc rgb "black" lw 2
gnuplot>
Cuja saída gráfica é a mesam da listagem anterior.
10 Utilizando Arquivo Texto
Se um arquivo texto contiver dados formatados em linhas e colunas,
então será possível ao gnuplot fazer curvas tomando quaisquer uma
das colunas como dados de abcissa e outra como dados de ordenada.
Cada par tomado de dados de uma linha do arquivo texto será consi-
derado um ponto da curva.
Seja por exemplo o seguinte código em C que gera um arquivo texto
chamado saida.txt e contendo três colunas de dados numéricos ta-
buladas corretamente,
#include <stdio .h>
#include <math.h>
#define N 20
#define XMIN 0.0
#define XMAX 100.0
int main ( ) {
FILE∗ fp = fopen ( " saida . txt " , "w" ) ;
int k;
for ( k=0; k<N; k++) {
float x = XMIN + (XMAX−XMIN) ∗ k/(N−1);
float y = sqrt ( x ) ;
f p r in t f ( fp , "%.3f\t%.3f\t%.3f\n" , x , y , x∗y ) ;
}
fc lose ( fp ) ;
}
As dez primeiras linhas do arquivo saida.txt têm aspecto como segue,
0.000 0.000 0.000
5.263 2.294 12.075
10.526 3.244 34.152
15.789 3.974 62.741
21.053 4.588 96.596
26.316 5.130 134.997
31.579 5.620 177.458
36.842 6.070 223.623
42.105 6.489 273.215
47.368 6.882 326.012
...
Copie este aquivo para a pasta a partir de onde o gnuplot é execu-
tado ou execute o gnuplot estando na pasta onde ele (saida.txt) foi
18
gerado. Isso dará ao gnuplot acesso direto a saida.txt. Para plotar
uma curva que use abcissas da primeira coluna e como ordenadas a
segunda coluna use,
gnuplot> plot "saida.txt" using 1:2
gnuplot>
0
2
4
6
8
10
0 20 40 60 80 100
"saida.txt" using 1:2
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+
O nome do arquivo segue plot entre aspas e o modificador using in-
dica as duas colunas (separadas por dois-pontos) que devem ser usa-
das. Se houvesse ai using 2:3, seriam usadas respectivamente para
abcissas e ordenadas, dados das colunas 2 e 3. Se apenas uma coluna
é fornecida, como em using 2, ela será tomada como dados de orde-
nada ao passo que as abcissas serão os inteiros naturais (0, 1, 2, 3,
...).
Há situações em que os dados não bastam para criar as curvas sendo
necessário ainda processá-los. Por exemplo, suponha que, utilizando o
arquivo saida.txt, desejemos plotar o dobro de cada valor da primeira
coluna pelo triplo da segunda. Neste caso deve-se transformar as co-
lunas argumentos de using em expressões avaliativas que rendam os
valores desejados. Uma expressão avaliativa está sempre entre parên-
teses e manipula o valor de uma dada coluna pré fixando seu índice
com $. O exemplo citado então fica,
gnuplot> plot "saida.txt" using (2*$1):(3*$2)
gnuplot>
0
5
10
15
20
25
30
0 50 100 150 200
"saida.txt" using (2*1) : (3∗2)
+
+
++
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+
19
Não há restrições nas expressões avaliativas sendo inclusive possível
operar entre colunas. No exemplo,
gnuplot> plot "saida.txt" using ($1):( ($2+$3)/2 )
gnuplot>
as abcissas são valores da primeira coluna ao passo que as ordena-
das são os valores médios entre os dados da segunda e terceira co-
luna. Naturalmente a expressão using 1:2 é equivalente a using
($1):($2). Assim a notação com parênteses e $ só é realmente in-
teressante quando processamento adicional é requerido.
O padrão de curvas com funções utiliza linhas ao passo que dados
de arquivos são plotados com pontos (pequenas cruzes). É entretanto
possível mudar estes padrões usando o modificador with. Por exemplo,
para plotar uma curva em linha dos dados do arquivo saida.txt use,
gnuplot> plot "saida.txt" using 1:3 with lines
gnuplot>
0
200
400
600
800
1000
0 20 40 60 80 100
"saida.txt" using 1:3
De forma similar pode-se obrigar funções a usarem pontos como em,
gnuplot> plot cos(x) with points
gnuplot>
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
-10 -5 0 5 10
cos(x)
+
++++
+
+
+
+
+
+
+
+
+
+
+
++
+++
+
+
+
+
+
+
+
+
+
+
+
++++
+
+
+
+
+
+
+
+
+
+
+
++
++++
+
+
+
+
+
+
+
+
+
+
+++++
+
+
+
+
+
+
+
+
+
+
+
+++++
+
+
+
+
+
+
+
+
+
+
+++++
+
+
20
11 Usando Scripts
O uso do gnuplot até este momento tem sido iterativo, ou seja, coman-
dos são discrminados e executados individualmente logo após terem
sido dados. Na prática é mais comum realizar o chamado processa-
mento em lote (batch mode), ou seja, escrever um arquivo contendo
instruções gnuplot e processá-lo de uma única vez . Um arquivo deste
tipo é denominado script. De fato um arquivo de script é um arquivo
de texto não sendo importante, por exemplo, sua extensão. Por con-
venção usaremos a extensão .gp podendo o usuário escrever scripts
com quaisquer extensão contanto que o conteúdo do arquivo seja ex-
clusivamente código gnuplot.
Seja um arquivo de exemplo denominado exemplo1.gp contendo ape-
nas instruções gnuplot. Para processá-lo deve-se escrever na linha de
comando,
$ gnuplot exemplo1.gp
Atente ao fato de o gnuplot precisar estar convenientemente configu-
rado para estar visível na pasta corrente que contém exemplo1.gp. No
linux isso é configurado pela própria instalação do gnuplot. No win-
dows é necessário configurar a pasta binary interna a pasta principal
do gnuplot. Para tanto deve-se adicionar o caminho completo desta
pasta (o local corrente em disco onde ela está na sua máquina) para
a variável de ambiente PATH (abra a janela propriedades de sistema
e clique em variáveis de ambiente, procure e edite a variável PATH e,
separando com ponto-e-vírgula, adicione o caminho de sua pasta).
Scripts podem ser editados em quaisquer editores de texto simples.
Po exemplo, para usuários linux que utilizam GNOME, podem usar o
gedit. No Windows o bloco de notas (notepad) é suficiente. Abra seu
editor de preferência e escreva o código gnuplot pretendido. por fim
salve-o na pasta que está corrente na linha de comando e execute o
script conforme já ilustrado.
Uma peculiaridade do processamento em lote é que após a execução
nenhum gráfico será exibido. De fato o gráfico é gerado, mas como a
execução do script se encerra o gráfico vai embora com ela. Para revol-
ver o problema deve-se redirecionar a saída gráfica para, por exemplo,
um arquivo de imagem que poderá ser aberto e visualizado após o tér-
mino do script. Para fazer isso deve-se modificar o tipo de terminal
utilizado e definir um nome para o arquivo de imagem que conterá a
saída. Usaremos aqui o terminal jpeg para ilustrar isso. Com este
terminal ativo pode-se gerar imagens jpeg do gráfico construído. No
exemplo,
% Exemplo de script gnuplot
set term jpeg
set output "imagem1.jpg"
plot [-10:10] x*x lw 3
A linha set term jpeg define o terminal jpeg ao passo que set output
define o nome do arquivo de imagem de saída. Em scripts todo con-
teúdo de uma linha adiante de um % é considerado um comentário e
21
não é processado (use isso para documentar o script como no exemplo
anterior). Neste exemplo o arquivo de imagem imagem1.jpg é criado
na mesma pasta onde está o arquivo de script (para mudar isso espe-
cifique o diretório completo entre as aspas duplas do novo arquivo de
imagem).
12 Ajuste de Curvas
Ajustar uma curva ou obter a curva que ajusta pontos um modelo de
função significa determinar os coeficientes da função-modelo de forma
que ela passe o mais próximo dos pontos dados. Se a quantidade de
pontos dada for determinística (capaz de definir uma única instância
da função) então o ajuste será exato, ou seja, os pontos ajustados farão
parte da função de ajuste. Por exemplo, considere o modelo de função,
f(x) = ax2 + bx+ c
e os pontos,
x y
1.0 17
-3.0 85.0
8.0 129.0
O modelo é de uma função de segundo grau. Os coeficientes a se de-
terminarem são a, b e c. O exemplo é determinístico pois três pontos
não colineares definem uma única função de segundo grau.
Em gnuplot utiliza-se o comado fit para efetuar ajustes de curva. Um
receituário para a tarefa é descrito a seguir,
1. Salve os pontos num arquivo texto separando colunas com espa-
ços ou tabulações e linhas com quebras de linhas. É comodo que
este arquivo esteja na pasta corrente (de onde o gnuplot poderá
acessá-lo sem necessitar de um caminho). No nosso exemplo cri-
amos um arquivo ’pontos.dat’ cujo conteúdo fica com aspecto,
1.0 17.0
-3.0 85.0
8.0 129.0
2. Definimos um modelo no gnuplot da função. É exatamente como
criar uma definição de uma função, mas neste caso usamos va-
riáveis adicionais para definir os coeficientes. Para definir um
modelo de equação de segundo grau em gnuplot escrevemos,
gnuplot> f(x) = a*x**2 + b*x + c
gnuplot>
3. Adicionalmente podemos dar valores iniciais aos coeficientes. Algo
como,
22
gnuplot> a = 1.0
gnuplot> b = 1.0
gnuplot> c = 1.0
gnuplot>
O sentido disso está no fato de o algoritmo utilizado para fazer
o ajuste ser numérico-iterativo, ou seja, parte de estimativas ini-
ciais para os coeficientes e reliza um número finito de iterações
até que a resposta seja encontrada ou até descobrir que não pode
encontrar os coeficientes. Diz-se neste último caso que houve di-
vergência. Divergências podem ser evitadas se bons valores inici-
ais forem dados. Bons valores iniciais dos coeficientes significam
também poucas iterações.
4. Invocamos o comanfo fit no gnuplot com a seguinte sintaxe,
fit [modelo] [arquivo de dados] using [colunas] via [coeficientes]
As colunas, anunciadas pelo modificador using, devem ser sepa-
radas com : indicando a numeração que as respectivas ocupam
dentro do arquivo de dados. O modificador via anuncia os co-
eficientes através dos quais ocorrerá o ajuste. Temos então em
nosso exemplo,
gnuplot> fit f(x) ’./pontos.dat’ using 1:2 via a,b,c
indicando que um ajuste será realizado utilizando o modelo f(x)
através dos pontos no arquivo ’pontos.dat’ aplicando a coluna 1
como abcissa e a coluna 2 como ordenada e registrando os resulta-
dos nos coeficientes a, b e c.
A execução de um ajuste em gnuplot gera como saída um relatório
dos valores alcançados pelos coeficientes ao final de cada iteração.
Um trecho dessas informações segue,
Iteration 0
WSSR : 9416 delta(WSSR)/WSSR : 0
delta(WSSR) : 0 limit for stopping : 1e-05
lambda : 21.7435
initial set of free parameter values
a = 1
b = 1
c = 1
/
Iteration 1
WSSR : 4778.04 delta(WSSR)/WSSR : -0.970683
delta(WSSR) : -4637.96 limit for stopping : 1e-05
lambda : 2.17435
23
resultant parameter values
a = 1.96851
b = 0.554314
c = 1.16605
/
Iteration 2
...
No final do processo o gnuplot faz um relatório conclusivo indi-
cado, por exemplo, o total de iteraçõesefetuadas. O relatório final
do exemplo aborado é mostrado a seguir,
*************************
After 7 iterations the fit converged.
final sum of squares of residuals : 2.01948e-28
rel. change during last iteration : 0
Exactly as many data points as there are parameters.
In this degenerate case, all errors are zero by definition.
Final set of parameters
=======================
a = 3
b = -11
c = 25
Note que os valores finais dos coeficientes são listados. Após a con-
vergência o modelo, f(x), se converte na função ajustada, ou seja,
f(x) = 3x2 − 11x+ 26. Assim a saída de,
gnuplot> f(x) = 3*x**2 - 11*x + 25
gnuplot> plot [-4:9] f(x), ’./pontos.dat’ using 1:2 with points
gnuplot>
0
20
40
60
80
100
120
140
160
180
-4 -2 0 2 4 6 8
f(x)
’./pontos.dat’ using 1:2
+
+
+
+
24
Note que os pontos ficaram exatamente sobre a curva da parábola (mo-
delo determinístico).
Consideraremos um outro exemplo, desta vez não determinística. Seja
’dados.dat’ um arquivo contendo duas colunas (digamos, x e y) de
100 linhas com x na faixa 0..10 e y na faixa 0..20. Computando,
g(x) = a*x + b
a = 1.0
b = 0.0
fit g(x) ’./dados.dat’ using 1:2 via a, b
plot [0:10] ’./dados.dat’ using 1:2 with points, g(x)
obtemos,
13 Usando Ajuda do Gnuplot
Para obter mais detalhes sobre os recursos apresentados neste artigo, e
outras cetenas mais que não mencionamos aqui, use o comando help.
Ele deve ser escrito acompanhado do comando que se deseja um maior
detalhamento. Poe exemplo chamar,
gnuplot> help set
lista a ajuda de set e mostra todos os itens que ele pode configurar.
Para detalhamento de algum deles basta digitá-lo ou chamar direta-
mente no prompt,
gnuplot> help set angles
A maioria dos comandos aqui contém algum material de ajuda (help
plot, help linecolor, help with, help using e etc). Um tutorial
completo do gnuplot está disponível em inglês no endereço,
http://www.gnuplot.info/docs/gnuplot.html
25

Outros materiais

Materiais relacionados

Perguntas relacionadas

Perguntas Recentes