Vous êtes sur la page 1sur 20

Introdu¸c˜ao ao GNUPLOT

Prof. Ricardo Reis 22 de fevereiro de 2011

1 Introdu¸c˜ao

Gnuplot ´e um software livre para desenho (plotagem) de fun¸c˜oes em duas e trˆes di- mens˜oes (2D e 3D). A ultima´ vers˜ao est´avel at´e a escrita deste documento ´e a 4.4.0. Vers˜oes em bin´ario (pronto para instala¸c˜ao) e em c´odigo fonte (precisam ser com- piladas e depois montadas no sistema) tanto para windows como para linux est˜ao dispon´ıveis no endere¸co http://sourceforge.net/projects/gnuplot/files/ (na parte inferior do site ´e poss´ıvel fazer o download da vers˜ao que condiz com seu sistema).

2 Prompt de Entrada

Depois de instalado o gnuplot poder´a ser executado. Se o sistema criar um ´ıcone de atalho basta acion´a-lo com o mouse. Do contr´ario uma janela de terminal (modo de entrada onde as a¸c˜oes s˜ao dadas digitando-se comandos) dever´a ser executada (no li- nux h´a atalhos nos menus do sistema – no Ubuntu utilize AplicativosAcess´oriosTerminal – e no Windows use iniciarexecutar e digite cmd depois OK). O gnuplot dever´a ser executado digitando-se gnuplot no terminal aberto, como no exemplo (linux),

$ gnuplot

No Windows existe uma vers˜ao .zip que, ap´os descompactada, est´a pronta para uso. Basta ir na subpasta binary e clicar em gnuplot.exe. Em qualquer caso uma janela de terminal abrir´a e exibir´a um conte´udo 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

gnuplot

home:

http://www.gnuplot.info

faq,

bugs,

etc:

type

"help

seeking-assistance"

immediate

help:

type

"help"

plot

window:

hit

’h’

1

Terminal

type

set

to

’wxt’

gnuplot>

A ultima´ linha, gnuplot>, ´e denominada prompt de entrada e aguarda por entrada

do usu´ario. Quando uma entrada est´a completa pressiona-se ¡ENTER¿, gnuplot

executa a a¸c˜ao e volta para o prompt para aguardar nova entrada. Exemplo,

gnuplot>

plot

sin(x)

gnuplot>

A entrada plot sin(x) ´e dada e depois de executada o gnuplot volta, na linha

seguinte, para o prompt onde nova entrada ser´a aguardada. Um terminal gr´afico abrir´a noutra janela e exibir´a o gr´afico ao lado.

3 Terminais Gr´aficos

Chama-se terminal gr´afico a janela auxiliar que o gnuplot abre para exibir um gr´afico. H´a tantos terminais gr´aficos dispon´ıveis em sua m´aquina quanto forem instalados (o gnuplot instala alguns para vocˆe). Para visualizar uma lista completa de terminais gr´aficos digite,

set

term

Isso exibir´a uma lista dos terminais gr´aficos dispon´ıveis. Normalmente o terminal gr´afico padr˜ao do gnuplot ´e o wxt. Esta informa¸c˜ao ´e exibida quando vocˆe 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´afica.

4

Plotando Gr´aficos em 2D

O

nome padr˜ao da vari´avel independente em gnuplot ´e x. Assim para plotar um

gr´afico a partir de uma fun¸c˜ao, deve-se usar um nome de fun¸c˜ao v´alida com argumento x. As principais fun¸c˜oes matem´aticas do gnuplot s˜ao listadas na tabela

a seguir,

2

Fun¸c˜ao

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´olico de x, x em radianos

erf(x)

fun¸cao erro de x

exp(x)

exponencial de x, base e

inverf(x)

erro inverso de x

invnorm(x)

distribui¸c˜ao inversa normal de x

log(x)

log de x, base e

log10(x)

log de x, base 10

norm(x)

distribui¸c˜ao normal Gaussiana de x

rand(x)

gerador de n´umeros pseudo-aleat´orios

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´olico de x, x em radianos

sqrt(x)

raiz quadrada de x

tan(x)

tangente de x, x em radianos

tanh(x)

tangente hiperb´olica de x, x em radianos

O comando gnuplot para plotagem 2D ´e plot. Por exemplo, para plotar a fun¸c˜ao seno usa-se,

gnuplot>

plot

sin(x)

gnuplot>

 

1

   

0.8

 

sin(x)

0.6

 

0.4

0.2

0

-0.2

-0.4

-0.6

-0.8

-1

-10

-5

0

5

10

isso desenhar´a no terminal gr´afico a fun¸c˜ao seno. Para alterar o dom´ınio de plo- tagem (intervalo nas abcissas onde dever´a ser plotada a fun¸c˜ao), 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 π faz-se,

gnuplot>

plot

[0:pi]

sin(x)

gnuplot>

3

1 sin(x) 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 0 0.5 1
1
sin(x)
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0
0.5
1
1.5
2
2.5
3

onde pi ´e o valor de π no gnuplot. A sa´ıda ´e mostrada na figura ao lado.

H´a algumas situa¸c˜oes em que o intervalo nas ordenadas precisa tamb´em ser especi-

ficado. Neste caso utiliza-se outro par de colchetes seguidos do p rimeiro utilizando

a mesma sintaxe j´a apresentada. No exemplo,

gnuplot> plot [-10:10] [-3:3] x*x gnuplot> 3 x*x 2 1 0 -1 -2 -3 -10
gnuplot>
plot
[-10:10]
[-3:3]
x*x
gnuplot>
3
x*x
2
1
0
-1
-2
-3
-10
-5
0
5
10

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´em os colchetes referentes `as abcissas, mas neste caso sem limites, como no

exemplo,

gnuplot>

plot

[:]

[-3:3]

x*x

gnuplot>

Para desenhar mais de uma fun¸c˜ao em gnuplot, separe as fun¸c˜oes por v´ırgula.

Exemplo,

gnuplot>

plot

[-10:10]

x**2

+

5*x

-

4,

9*x-11

gnuplot>

 

4

150 x**2+5*x-4 100 9*x-11 50 0 -50 -100 -150 -10 -5 0 5 10
150
x**2+5*x-4
100
9*x-11
50
0
-50
-100
-150
-10
-5
0
5
10

onde ** ´e o operador de potˆencia. S˜ao operadores aritm´eticos legais em gnuplot,

Operador

O Que Faz

+

Soma

-

Subtra¸c˜ao

/

Multiplica¸c˜ao Divis˜ao

%

Resto de divis˜ao de inteiros

*

Potˆencia

O resultado do exemplo anterior ser´a a plotagem das fun¸c˜oes f (x) = x 2 + 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 ´e em geral formado por um conjunto de propriedades gr´aficas que incluem, para o caso de curvas, cor, espessura, tamanho e forma dos pontos, padr˜ao de linha e etc. Usando o comando test ´e poss´ıvel ver, para o terminal vigente, os valores de espessura, padr˜oes de linha, cores e formas de pontos dispon´ıveis. Consideraremos neste artigo apenas a cor e a espessura 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´alida entre aspas duplas. Exemplo,

gnuplot>

plot

[0:5]

exp(x)

lc

rgb

"red"

 

5

160

140

120

100

80

60

40

20

0

exp(x) 0 1 2 3 4 5
exp(x)
0
1
2
3
4
5

A fun¸c˜ao ´e plotada com linha de cor vermelha. Para ver a lista de cores dispon´ıveis

no gnuplot use,

gnuplot>

show

colornames

Cada cor desta lista ´e apresentada com seu equivalente em hexadecimal (inicia com #) e podem ser utilizadas com mesmo efeito.

O modificar de espessura de linha ´e linewidth (ou simplesmente lw). Ele ´e seguido do

´ındice de espessura (n˜ao do valor!) oferecido pelo terminal gr´afico (use o comando test e veja os valores de ´ındice v´alidos). Por exemplo, para plotar a fun¸c˜ao 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.5 log(5*x-7) 6 5.5 5
gnuplot>
plot
[10:100]
log(5*x-7)
lc
rgb
"blue"
lw
4
gnuplot>
6.5
log(5*x-7)
6
5.5
5
4.5
4
3.5
10
20
30
40
50
60
70
80
90
100

Caso mais de um gr´afico esteja presente, deve-se definir os estilos um a um. Se caso uma das fun¸c˜oes listadas n˜ao especifique o estilo, o gnuplot utilizar´a o padr˜ao. Veja o exemplo,

gnuplot>

plot

[3:10]

1/(x**2-1)

lc

rgb

"blue"

lw

4,

x/20

lc

rgb

"red"

lw

3

 

6

0.5

0.45

0.4

0.35

0.3

0.25

0.2

0.15

0.1

0.05

0

1/(x**2-1) x/20 3 4 5 6 7 8 9 10
1/(x**2-1)
x/20
3
4
5
6
7
8
9
10

isto plota duas fun¸c˜oes 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¸c˜ao de definir um estilo pr´oprio e depois aplic´a-lo `as curvas. Para definir um novo estilo de linha use o esquema geral,

set style line <´ındice> <op¸c~oes do estilo>

o valor de ´ındice ´e um n´umero definido pelo usu´ario e ´e usado para invocar o

estilo quando a plotagem for solicitada. As op¸c˜oes de estilo incluem espessura, cor,

tamanho e forma de pontos, padr˜ao de linha entre outras. A defini¸c˜ao de um estilo passa a valer a partir do ponto que ele ´e definido. Para invocar um estilo novo, use linestyle (ou simplesmente ls) seguido do ´ındice definido anteriormente. Exemplo,

gnuplot> set style line 7 lw 3 lc rgb "blue" gnuplot> plot sin(x) ls 7,
gnuplot>
set
style
line
7
lw
3
lc
rgb
"blue"
gnuplot>
plot
sin(x)
ls
7,
cos(x)
ls
7
gnuplot>
1
sin(x)
0.8
cos(x)
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
-10
-5
0
5
10

Isso define um estilo de linha de ´ındice 7 e atribui a ele cor azul e espessura de

o

´ındice 4.

estilo definido.

Os gr´aficos plotados logo em seguida invocam com ls 7 (cada um!)

6

Configurando com set

O

comando set tem sido usado sem maiores explica¸c˜oes. De fato ele tem larga

aplica¸c˜ao no gnuplot configurando estados do programa antes de realizar uma plo-

7

tagem. Usando help set o gnuplot imprime uma lista de entidades que podem

ser configuradas por set. Para desfazer uma a¸c˜ao de set usa-se o comando unset.

A seguir apresentamos a configura¸c˜ao de algumas entidades com set/unset.

6.1 set title, set xlabel, set ylabel

Caso o gr´afico precise de um t´ıtulo utiliza-se set title. No exemplo,

gnuplot> set title "minha funcao" gnuplot> plot x**2-1 gnuplot> minha funcao 100 90 x**2-1
gnuplot>
set
title
"minha
funcao"
gnuplot>
plot
x**2-1
gnuplot>
minha funcao
100
90
x**2-1
80
70
60
50
40
30
20
10
0
-10
-10
-5
0
5
10

Similarmente r´otulos po-

dem ser definidos para os eixos coordenados x e y respectivamente utilizando set

o t´ıtulo minha funcao ´e impresso no topo do gr´afico.

xlabel e set ylabel. No exemplo, gnuplot> set title "crescimento de bacterias" gnuplot> set
xlabel e set
ylabel.
No exemplo,
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>
crescimento de bacterias
140
0.3*exp(x)
120
100
80
Q(g)
60
40
20
0
0
1
2
3
4
5
6
t(s)

8

6.2 set angles

O padr˜ao de ˆangulos em gnuplot ´e radianos. Para mudar para graus use set angles

degrees.

o exemplo,

Para trazer de volta, use unset

angles ou set

angles radians. Veja

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 ´e um comando de impress˜ao de qualquer valor num´erico ou texto dentro do gnuplot (vocˆe expressa texto em gnuplot colocando-o entre aspas duplas. Exemplo, print \ola mundo", imprimir´a ol´a mundo).

6.3 set size

As plotagens no terminal gr´afico acontecem dentro de uma ´area restrita por um retˆangulo que cont´em marcas num´ericas em duas de suas quatro bordas e que in- dicam valores nas abcissas e ordenadas das fun¸c˜oes plotadas. A propor¸c˜ao entre a altura e a largura deste retˆangulo, conhecido como aspect-ratio, se mant´em quando a janela ´e redimensionada impedindo a deforma¸c˜ao do gr´afico. O valor padr˜ao de aspect-ratio ´e de 1 para 1 (aspect-raio = 1/1 = 1). O aspect-ratio pode entre- tanto ser modificado utilizando set size. Utilize set size square para aplicar

o aspect-rato padr˜ao (square, significa quadrado cuja a propor¸c˜ao de dimens˜oes ´e

de 1 para 1). Para valores personalizados de aspect-ratio deve ser usada uma raz˜ao de propor¸c˜ao da altura pelo comprimento do retˆangulo que poder´a ser fornecida

de duas formas. Primeiro como fra¸c˜ao onde o numerador e o denominador s˜ao fornecidos separados por v´ırgulas. Exemplo,

gnuplot>

set

size

2,

5

gnuplot>

Isso causar´a ao retˆangulo de plotagem propor¸c˜ao de 2 para 5 entre altura e largura. Na segunda forma usa-se o modificador ratio seguido do valor de raz˜ao 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.

9

6.4 set key

Gr´aficos em gnuplot mantˆem uma legenda contendo referˆencias para cada curva plotada. Cada referˆencia ´e formada por uma linha horizontal na cor da linha re- ferenciada acompanhada da equa¸c˜ao da fun¸c˜ao. O comando set key configura legendas em gnuplot. Use help set key para ver todas as op¸c˜oes. Para desligar legendas use unset key ou set key off. Para reabilit´a-las use set key on.

6.5 set multiplot

H´a situa¸c˜oes em que gr´aficos distintos devem compartilhar a mesma janela ficando vizinhos uns dos outros. Para fazer isso utilize set multiplot. Este comando define um layout de c´elulas que conter˜ao cada qual uma plotagem independente. A propor¸c˜ao que chamadas a plot v˜ao sendo realizadas (ap´os defini¸c˜ao do layout), c´elulas vazias v˜ao sendo preenchidas ate que a tela encha (novas chamadas a plot n˜ao tˆem mais onde plotar). Para limpar a tela deve-se encerrar o modo de multi- plotagem 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

No exemplo,

gnuplot>

set

layout

<numero

multiplot

layout

de

3,

linhas>,

2

<numero

de

colunas>

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>

Inicializa o modo de multiplotagem com 3 linhas e 2 colunas (Observe que quando multiplot ´e chamado ocorre uma mudan¸ca do prompt gnuplot> para multiplot>). A sa´ıda obtida ´e,

10

10 9 1 0.8 x**2 sin(x) 8 0.6 7 0.4 6 0.2 5 4 3
10 9
1
0.8
x**2
sin(x)
8
0.6
7
0.4
6
0.2
5
4
3 2
1
-0.2 -0.4 -0.6 -0.8 -1 0
0
-3
-2
-1
0
1
2
3
-3
-2
-1
0
1
2
3
4
1/x
4
x**3
2
2
0
0
-2
-2
-4
-4
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
As chamadas seguintes,
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
10
x**2
1/x
4
8
sin(x)
x**3
2
6
4
0
2
-2
0
-4
-2
-3
-2
-1
0
1
2
3
-1
-0.5
0
0.5
1

apesar de plotarem quatro curvas, s´o usam duas c´elulas. Isso ocorre poque apenas duas chamadas a plot s˜ao realizadas. Cada uma das duas c´elulas utilizadas conter´a duas curvas.

6.6 set parametric

Para habilitar o modo de uso de equa¸c˜oes param´etricas use set parametric. Para deslig´a-lo use unset parametric. Neste modo a vari´avel independente ´e t (n˜ao ´e mais x!) e cada curva precisa de uma par de equa¸c˜oes (a primeira x(t) e a segunda y(t)). Por exemplo para plotar um c´ırculo em gnuplot use,

gnuplot>

set

parametric

11

dummy variable is t for curves, u/v for surfaces gnuplot> plot sin(t), cos(t) gnuplot> 1
dummy
variable
is
t
for
curves,
u/v
for
surfaces
gnuplot>
plot
sin(t),
cos(t)
gnuplot>
1
sin(t), sin(t), cos(t)
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.2
0
0.2 0.4 0.6
0.8
1

A mensagem exibida pelo gnuplot ap´os a configura¸c˜ao do modo param´etrico indica que a vari´avel independente mudou de nome. Para plotar mais de uma curva em modo param´etrico deve-se formar pares de fun¸c˜oes e formatar apenas a segunda de cada (caso um novo estilo seja necess´ario). 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

sin(t), sin(t), cos(t) t**2, t**2, t -2 0 2 4 6 8 10
sin(t),
sin(t), cos(t)
t**2, t**2, t
-2
0
2
4
6
8
10

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 ´e marcada por uma valor de raio e

12

um ˆangulo tra¸cados a partir da origem. O raio ´e a vari´avel dependente e o ˆangulo a independente (exemplo, r(θ) = sin(θ) denota uma fun¸c˜ao em coordenadas polares, onde r denota o raio e θ o ˆangulo). A vari´avel independente em gnuplot no modo polar ´e t. Para plotar uma rosa de trˆes p´etalas use,

gnuplot> set polar

dummy variable is t for curves gnuplot> plot sin(3*t) 0.6 sin(3*t) 0.4 0.2 0 0.2
dummy
variable
is
t
for
curves
gnuplot>
plot
sin(3*t)
0.6
sin(3*t)
0.4
0.2
0
0.2
0.4
0.6
0.8
1
1
0.8
0.6 0.4 0.2
0
0.2 0.4 0.6
0.8
1
7 Definindo Vari´aveis e Fun¸c˜oes

Para definir uma vari´avel em gnuplot basta atribuir um valor ao nome da nova vari´avel. Exemplo,

gnuplot>

w

=

45

gnuplot>

a

=

45

estas chamadas criam as vari´aveis w e a. Vari´aveis podem ser definidas tamb´em a partir do valor de outras vari´aveis j´a definidas. Exemplo,

gnuplot>

max

=

56.0

gnuplot>

min

=

24.4

gnuplot>

med

=

(max+min)/2

gnuplot>

Para saber o conte´udo de uma vari´avel j´a definida, use print. Exemplo,

gnuplot>

print

med

40.2

gnuplot>

Para criar uma fun¸c˜ao em gnuplot deve-se definir um identificador, p´os-fix´a-lo de um par de parˆenteses contendo as vari´aveis independentes e por fim igualar esta defini¸c˜ao a uma equa¸c˜ao que contenha como vari´aveis apenas as vari´aveis definidas. Exemplo,

gnuplot>

f(x)

=

sqrt(x**2

-

5)

gnuplot>

13

Isso define a fun¸c˜ao. Para plotar essa fun¸c˜ao use,

gnuplot> plot f(x) ou gnuplot> plot [-10:10] f(x) lc rgb \green" lw 2 10 f(x)
gnuplot>
plot
f(x)
ou
gnuplot>
plot
[-10:10]
f(x)
lc
rgb
\green"
lw
2
10
f(x)
9
8
7
6
5
4
3
2
1
0
-10
-5
0
5
10

Apesar de x ser o identificador padr˜ao para vari´avel independente, a defini¸c˜ao de uma fun¸c˜ao pode lidar com qualquer identificador, como em,

gnuplot>

f(a)

=

sqrt(a**2

-

5)

gnuplot>

Entretanto para plotar a fun¸c˜ao deve-se chamar plot f(x) o que far´a x tomar o valor de a. N˜ao esque¸ca que o gnuplot define x como vari´avel independente e ´e ele quem deve estar presente na express˜ao final da fun¸c˜ao a ser plotada. Para definir uma fun¸c˜ao de mais de uma vari´avel, liste-as entre os parˆenteses da defini¸c˜ao da fun¸c˜ao separando-as por v´ırgulas. Exemplo,

gnuplot>

pot(a,b)

=

exp(

b*log(a)

)

gnuplot>

Isso define a fun¸c˜ao pot. Para testar a nova fun¸c˜ao use,

gnuplot>

print

pot(2,

3)

8.0

gnuplot>

Para construir um plot 2D com fun¸c˜oes de mais de uma vari´avel independente deve- se naturalmente repassar o x para apenas um dos argumentos e os demais devem receber valores constantes. No exemplo,

gnuplot>

pot(a,b)

=

exp(b*log(a))

 

gnuplot>

pset

style

line

9

lw

3

lc

rgb

"red"

 

gnuplot>

plot

pot(2.0,

x)

ls

9,

pot(x,

2)

ls

9

as fun¸c˜oes plotadas s˜ao respectivamente 2 x e x 2 .

14

1200 pot(2.0, x) 1000 pot(x, 2) 800 600 400 200 0 -10 -5 0 5
1200
pot(2.0, x)
1000
pot(x, 2)
800
600
400
200
0
-10
-5
0
5
10

8

Operador Tern´ario de Decis˜ao

O

operador tern´ario ?: (a interroga¸c˜ao e os dois-pontos constituem este operador)

no gnuplot permite construir estruturas condicionais. Ele forma uma express˜ao de

trˆes 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˜ao como um todo ser´a exp2 e do contr´ario

exp3.

No exemplo,

 

gnuplot>

w

=

45

gnuplot>

q

=

w>10

?

9

:

11

gnuplot>

print

q

9

gnuplot>

a express˜ao w>10 retorna verdadeiro pois w foi inicializado com 45. Da´ı q recebe 9 e n˜ao 11. O operador >(maior que) ´e denominado um operador relacional e w>10 uma express˜ao relacional (porque vale verdadeiro ou falso). Os operadores relacionais do gnuplot s˜ao,

operador

significado

>

maior que

<

menor que

>=

maior ou igual

<=

menor ou igual

==

igual

!=

diferente

O operador ?: tamb´em pode ser usado em defini¸c˜oes de fun¸c˜oes em partes. Para

definir a fun¸c˜ao em parte,

f(x) =

use,

x

x 2

x < 0 x 0

15

gnuplot> f(x) = x<0 ? -x : x**2 gnuplot> plot [-5:5] f(x) gnuplot> 25 f(x)
gnuplot>
f(x)
=
x<0
?
-x
:
x**2
gnuplot>
plot
[-5:5]
f(x)
gnuplot>
25
f(x)
20
15
10
5
0
-4
-2
0
2
4

isso plotar´a um gr´afico que ´e parcialmente linha, parcialmente par´abola. Se mais que duas equa¸c˜oes comporem a fun¸c˜ao em partes, como em,

f(x) =


10 2x 25 x 2

x 5

x < 5 5 x 5

x > 5

use associa¸c˜oes do operador ?:. A fun¸c˜ao h(x) anterior ´e plotada usando,

gnuplot> set key off gnuplot> h(x) = x<-5 ? -10-2*x: (x<=5 ? 25-x**2 : 8*sqrt(x-5))
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
30
25
20
15
10
5
0
-5
-10
-10
-5
0
5
10

9 Usando La¸cos

Considere a fun¸c˜aoque deve ser plotada para oito valores de a distintos e equidistan- tes no intervalo {2, 25}. Estes oito valores podem ser obtidos por a(i) = 2 + 3 i1 onde i ´e um inteiro no intervalo {1, 8}. Desta forma as oito curvas se distinguir˜ao unicamente por um valor de i e poder˜ao ser plotadas num la¸co de contagem. A estrutura de uma plotagem com la¸co de contagem em gnuplot tem formato geral,

,

7

plot

for

[<contador>=<minimo>:<maximo>]

<funcao_de_x_e_do_contador>

16

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>
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>
600
500
400
300
200
100
0
-10
-5
0
5
10

Apesar do identificador a ser usado na defini¸c˜ao da fun¸c˜ao a(i) e no segundo argu- mento de f(), tratam-se de coisas diferentes. Na plotagem propriamente dita, de contador i e limites 1 e 8, a chamada `a f() invoca internamente a(i) para repassar seu valor ao argumento a. Remodelando as vari´aveistem-se,

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´afica ´e a mesam da listagem anterior.

10 Utilizando Arquivo Texto

Se um arquivo texto contiver dados formatados em linhas e colunas, ent˜ao ser´a 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´a considerado um ponto da curva.

Seja por exemplo o seguinte c´odigo em C que gera um arquivo texto chamado saida.txt e contendo trˆes colunas de dados num´ericos tabuladas corretamente,

#i n cl u d e #i n cl u d e

< s t d i o . h> <math . h>

#d e fi n e

N

20

#d e fi n e

XMIN

0. 0

#d e fi n e

XMAX

1 0 0. 0

int

main ()

{

FILE

f p

=

f o p e n ( ” s a i d a . t x t ” ,

”w” ) ;

int

k ;

f o r

( k=0;

k<N;

k++) {

17

f l o a t float

f p r i n t f ( fp , ”%.3 f \ t %.3 f \ t %.3 f \n” ,

x = XMIN + (XMAXXMIN)

y

=

s q rt ( x ) ;

k / (N1);

x ,

y ,

}

f c l o s e ( fp ) ;

xy ) ;

}

As dez primeiras linhas do arquivo saida.txt tˆem 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 ´e executado ou execute

o gnuplot estando na pasta onde ele (saida.txt) foi gerado. Isso dar´a 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> 10 8 6 4 + + + + +
gnuplot>
plot
"saida.txt"
using
1:2
gnuplot>
10
8
6
4
+ + + + + + + + + + + + + + + + + +
+
2
0 +
0
20
40
60
80
100

O nome do arquivo segue plot entre aspas e o modificador using indica as duas colunas (separadas por dois-pontos) que devem ser usadas. Se houvesse ai using 2:3, seriam usadas respectivamente para abcissas e ordenadas, dados das colunas 2 e 3. Se apenas uma coluna ´e fornecida, como em using 2, ela ser´a tomada como dados de ordenada ao passo que as abcissas ser˜ao os inteiros naturais (0, 1, 2, 3, ). H´a situa¸c˜oes em que os dados n˜ao bastam para criar as curvas sendo necess´ario ainda process´a-los. Por exemplo, suponha que, utilizando o arquivo saida.txt, desejemos plotar o dobro de cada valor da primeira coluna pelo triplo da segunda.

18

Neste caso deve-se transformar as colunas argumentos de using em express˜oes avaliativas que rendam os valores desejados. Uma express˜ao avaliativa est´a sempre entre parˆenteses e manipula o valor de uma dada coluna pr´e fixando seu ´ındice com $. O exemplo citado ent˜ao fica,

gnuplot> plot "saida.txt" using (2*$1):(3*$2) gnuplot> 30 25 20 15 10 + + + +
gnuplot>
plot
"saida.txt"
using
(2*$1):(3*$2)
gnuplot>
30
25
20
15
10
+ + + + + + + + + + + + + + + + + +
+
5
0 +
0
50
100
150
200

N˜ao h´a restri¸c˜oes nas express˜oes avaliativas sendo inclusive poss´ıvel operar entre colunas. No exemplo,

gnuplot>

plot

"saida.txt"

using

($1):(

($2+$3)/2

)

gnuplot>

as abcissas s˜ao valores da primeira coluna ao passo que as ordenadas s˜ao os valores m´edios entre os dados da segunda e terceira coluna. Naturalmente a express˜ao using 1:2 ´e equivalente a using ($1):($2). Assim a nota¸c˜ao com parˆenteses e $ s´o ´e realmente interessante quando processamento adicional ´e requerido.

O padr˜ao de curvas com fun¸c˜oes utiliza linhas ao passo que dados de arquivos s˜ao

plotados com pontos (pequenas cruzes).

E entretanto poss´ıvel mudar estes padr˜oes

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> 1000 800 600 400 200 0 0
gnuplot>
plot
"saida.txt"
using
1:3
with
lines
gnuplot>
1000
800
600
400
200
0
0
20
40
60
80
100
19

De forma similar pode-se obrigar fun¸c˜oes a usarem pontos como em,

gnuplot>

plot

gnuplot>

cos(s)

with

points

 

1

0.8

0.6

   

+ + + ++ + + +

+

+ + ++ + + +

+

+ +

+ + ++ + + +

+

+

   
 
 

+

+

0.4

 

+

+

+ +

+

+

 

0.2

 

+

+

+ +

+

 

+

 
 

+

 

0

 

+

+ +

+

+

 
 

+

     

+

 

-0.2

   

+

+ +

+

   
 

-0.4

-0.6

-0.8

 

+

 

+ +

+ +

 

+

 

+

+ +

+ +

+

 

+

+ +

+

+

+

   

+

+

-1

+ ++ + + +

 

+ + + ++ + + +

+ + ++ + +

+ + ++ + +

-10

 

-5

0

5

10

11 Usando Ajuda do Gnuplot

Para obter mais detalhes sobre os recursos apresentados neste artigo, e outras ce- tenas mais que n˜ao 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 detalha- mento de algum deles basta digit´a-lo ou chamar diretamente no prompt,

gnuplot>

help

set

angles

A maioria dos comandos aqui cont´em algum material de ajuda (help plot, help linecolor, help with, help using e etc). Um tutorial completo do gnuplot est´a dispon´ıvel em inglˆes no endere¸co, http://www.gnuplot.info/docs/gnuplot.html

20