Você está na página 1de 38

GNUPLOT

Manual simplificado para iniciantes

Leonardo Di Schiavi Trotta

Universidade Estadual Paulista Júlio de Mesquita Filho


Campus de Rio Claro

Fevereiro, 2014
Sumário

1 Introdução 3
1.1 O que é Gnuplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Instalando o Gnuplot - Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Comandos de Controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2 Plotando Gráficos 6
2.1 Funções Intrı́nsecas e Externas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Arquivo de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Editando labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4 Editando o incremento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5 Editando o alcance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.6 Editando a caixa de legenda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.6.1 Tı́tulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.6.2 Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.6.3 Posição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.7 Fonte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.8 Tı́tulo do gráfico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3 Argumentos do comando plot 16


3.1 Nomeando as curvas - plot title . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2 O argumento with . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2.1 Alterando a cor - linecolor . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.2 Largura da linha - linewidth . . . . . . . . . . . . . . . . . . . . . . . . . 21

4 Argumentos do comando multiplot 22


4.1 Tı́tulo e Fonte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.2 Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

1
4.3 Disposição dos gráficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

5 Arquivos de Saı́da 26
5.1 PDF,JPG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

6 Script GNU 27
6.1 Exemplo - Multiplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

7 Integrando o Gnuplot ao Fortran 90/95 32


7.1 Fortran 90/95 - CALL SYSTEM . . . . . . . . . . . . . . . . . . . . . . . . . . 32
7.2 Exemplo: Programa pronto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

2
Capı́tulo 1

Introdução

1.1 O que é Gnuplot


Gnuplot é um programa que funciona via linha de comando, compatı́vel com Linux, OS/2,
MS Windows, OSX, VMS e outras plataformas. Originalmente foi desenvolvido para facilitar
visualização de fórmulas matemáticas e dados de forma interativa. Atualizações vem sendo
desenvolvidas desde 1986.
Gnuplot suporta vários tipos de plots em 2D e 3D. Os gráficos podem ser representados por
pontos, por uma linha, por caixas, vetores, pode desenhar uma superfı́cie e etc.
O gráfico pode ser salvo em formatos como jpg, pdf e png, entre outros. Gnuplot é case
sensitive, ou seja, faz distinção entre letras maiúsculas e minúsculas. Comandos podem ser
abreviados contanto que não haja ambiguidade (ex: with lines: w l). Separa-se dois ou mais
comandos contidos numa mesma linha por um (; ). Espaços em branco serão ignorados. Strings
devem estar entre aspas duplas ou simples, com algumas diferenças sutis.
Para comandos que se extendem por mais de uma linha, uma barra invertida (\) deve ser
introduzida ao final de cada uma, menos a última.
Caso haja dúvidas em qualquer tópico, digite help seguido do nome do tópico ou help ?
para disponibilizar um menu dos tópicos disponı́veis, na linha do terminal do GNU.
É importante saber realizar a leitura do documento. As chaves ({ }) denotam argumentos
opcionais e a barra vertical (|) separa as escolhas possı́veis. Os colchetes (<>) são utilizados
para marcar sı́mbolos substituı́veis. Estes exemplos estarão mais claros nos capı́tulos seguintes.
O que nos interessa de fato é a integração que é possı́vel realizar entre o Gnuplot e o
Fortran 90/95.
Para maiores detalhes, acesse: http://www.gnuplot.info/demo/

3
1.2 Instalando o Gnuplot - Linux
Antes de tudo abra o terminal pelo comando ”CTRL+shift+t”. Verifique se você possuı́
uma senha definida para usuário root, caso não tenha, faça como se segue na figura abaixo.

Figura 1.1: Definindo super usuário.

Para instalar o gnuplot:

Figura 1.2: Instalação.

Se você estiver utilizando o Ubuntu 11.10 Oneiric Oncelot, provavelmente será instalado o
Gnuplot 4.4 Patchlevel 3. Pode-se conferir digitando no terminal:
gnuplot –version.
Gnuplot não possuı́ interface gráfica, funciona através do terminal, para abri-lo basta dar
o comando: gnuplot. Pode-se também executar diretamente um script já preparado: gnuplot
script.gnu. Este último será discutido em maiores detalhes nos capı́tulos seguintes.

Figura 1.3: Gnuplot

4
1.3 Comandos de Controle
Como visto na seção anterior, o Gnuplot é aberto pelo terminal. Quando queremos plotar um
gráfico a partir de um arquivo de dados precisamos fornecer o diretório completo do arquivo,
ao menos que o mesmo se encontre na diretório de trabalho do Gnuplot, neste caso, apenas o
nome do arquivo é necessário. O comando gnuplot> pwd fornece a pasta atual de trabalho.

Figura 1.4: Visualizando pasta atual.

Para abrir o Gnuplot na pasta de trabalho desejada, acesse-a primeiramente pelo terminal
utilizando o comando cd, depois abra o Gnuplot normalmente.
É possı́vel mudar a pasta de trabalho atual do Gnuplot por um comando similiar ao do
terminal: gnuplot> cd ’/diretorio/’. Adiciona-se aspas simples entre o diretório.
Outros três comandos muito utilizados são: unset, show e help. O primeiro desfaz qualquer
declaração, como tı́tulos, labels e etc (estará mais claro nos capı́tulos seguintes). O segundo
fornece a configuração atual dos tı́tulos, labels e etc. O terceiro fornece um tutorial sobre o
comando em si. Exemplos:

gnuplot> unset key # Desfaz configuraç~


ao atual.
gnuplot> show title # Fornece o tı́tulo e demais informaç~
oes relacionadas.
gnuplot> help label # Fornece um tutorial para configuraç~
ao da label.

O caracter # (hashtag) denota comentário e portanto o que vier a seguir na linha é ignorado
pelo compilador do Gnuplot.

5
Capı́tulo 2

Plotando Gráficos

2.1 Funções Intrı́nsecas e Externas


O Gnuplot é capaz de reconhecer algumas funções intrı́nsecas como logaritmo, seno, cossseno,
tangente e etc. Primeiramente demonstrarei como é fácil plotar uma função.
Na linha de comando do Gnuplot:

Figura 2.1: Comando para plotar.

Imediamente uma janela se abrirá e será possı́vel observar a seguinte imagem:

Figura 2.2: Plot da função sin(x)

6
É possı́vel também declarar uma função qualquer.

gnuplot> f (x) = x ∗ ∗2 + 2 ∗ x

Para plotar basta dar o mesmo comando, se referindo desta vez a já definida f (x).

gnuplot> plot f(x)

Muitas vezes precisamos comparar o comportamento de duas curvas. Para tal, basta que
separemos os dois plots por uma (,).

gnuplot> plot f(x), g(x)

Veremos mais tarde como editar as configurações do plot, como o nome das labels, tı́tulo,
cor, localização da caixa de legenda e etc.

2.2 Arquivo de dados


Uma função muito útil e a que será mais utilizada é a de plotar um gráfico a partir de dados
contidos num arquivo de texto. Observe a imagem abaixo:

Figura 2.3: Interpretação de dados no Gnu.

Este é um arquivo que contém dados dispostos em 3 diferentes colunas. A forma com a
qual o Gnuplot o interpreta que importa. Para cada coluna é atribuı́da uma diferente variável.
Diferente de plotar uma função, precisamos fornecer ao gnuplot o papel de cada coluna nos

7
diferentes eixos de coordenadas. Observe o seguinte comando:

gnuplot> plot ’xyz.dat’ {using <style>}

Por exemplo, em 2D, vamos definir a segunda coluna de dados para representar o eixo das
abscissas e a terceira o eixo das ordenadas. Para isto, declara-se o seguinte na linha de comando
do Gnuplot:

gnuplot> plot ’xyz.dat’ using 2:3

Estamos dizendo ao Gnuplot que os dados da coluna 2 serão representados pelo eixo das
abscissas e os dados da coluna 3 pelo eixo das ordenadas. Podemos fazer com que os dados
da primeira coluna sejam representados pelo eixo das abscissas e os da segunda pelo eixo das
ordenadas e vice-versa. Caso a opção seja omitida, Gnuplot interpretará automaticamente
como using 1:2 .

8
2.3 Editando labels
Se você plotar um gráfico através de seu arquivo de dados você reparará que as labels (eixos)
não estarão nomeados, isto ocorre por padrão. Para mudar esta situação é preciso fornecer à
linha de comando o seguinte:

gnuplot> set xlabel ’x’; set ylabel ’y’

Lembre-se, podemos separar dois comandos por (;). Agora veja como ficaria a figura 2.2 se
nomeássemos o eixo y como sin(x) e o eixo x como simplesmente x.

Figura 2.4: Nomeando os eixos de coordenadas (labels).

2.4 Editando o incremento


Observe a figura 2.4 ou 2.2. O incremento atual de x é 5, enquanto que o de sin(x) é 0,2. Esta
configuração foi automática, baseada na função plotada. Para realizar tal tarefa manualmente
declara-se o seguinte comando:

gnuplot> set xtics < value >; set ytics < value >

Em < value > entra-se o valor desejado, tirando-se os (<>).

9
2.5 Editando o alcance
Novamente observe a figura 2.4 ou 2.2, no eixo das abscissas, no caso x, os valores se limi-
tam de -10 a 10, enquanto que no eixo das ordenadas, no caso y, se limitam de -1 a 1. Estas
configurações foram geradas automaticamente pelo comportamento da função plotada. Para
editar o alcance declara-se, antes do plot:

gnuplot> set {xrange < x range>}; set {yrange <y range>}

Por exemplo:

gnuplot> set xrange [0:2]; set yrange [0:1]

Figura 2.5: Definindo intervalo de alcance.

2.6 Editando a caixa de legenda


Dependendo do formato da curva a caixa de legenda pode estar sendo omitida ou com
visualização dificultada. Para resolver este problema podemos mudar a localização, o tamanho
e a centralização.
Primeiramente explicitarei o comando em sua forma quase geral (omitindo apenas alguns
argumentos).

10
gnuplot> set key {title "< text >"} {on|off} {inside|outside} {(no)box}
{left|center|right} {top|bottom|center} {samplen < sample lenght >}
{width ”width increment”} {height ”height height”}

Há ainda outras opções, porém estas são mais importantes. Os argumentos on e of f ligam
e desligam a caixa de legendas.

2.6.1 Tı́tulo

A primeira title define o nome da caixa de legendas. Por padrão o Gnuplot omite. Veja este
exemplo:

gnuplot> set key title ’Funcoes Trigonometricas’


gnuplot> plot cos(x), sin(x)

Você observará o seguinte:

Figura 2.6: Definindo ”title”.

11
2.6.2 Box

Para fins estéticos, pode-se adicionar uma borda a caixa de legenda, ou removê-lo.

gnuplot> set key box

Figura 2.7: Adicionando bordas.

Para removê-lo, basta declarar gnuplot > set key no box e a caixa voltará ao normal.

2.6.3 Posição

Muitas vezes é preferı́vel que a caixa de legenda esteja posicionada em locais diferentes do
gráfico. Veja a figura 2.6, claramente vemos que a curva e a caixa se confundem. Estes fatores
causam dificuldade na leitura. Há formas de posicionar a caixa dentro e fora do gráfico, à
esquerda, direita ou centralizada. Segue o comando abaixo:

gnuplot> set key {left|center|right} {outside|inside}

Para fins ilustrativos, vamos colocar a caixa de legenda à direita, com o argumento box,
com tı́tulo definido e fora de nosso gráfico.

gnuplot> set key box right outside title ’Funcoes Trigonometricas’


; plot cos(x), sin(x)

12
Observaremos o seguinte:

Figura 2.8: Definindo a posição da caixa de legendas.

Para colocar a caixa no topo do gráfico, no rodapé ou no centro usa-se:

gnuplot> set key {top|center|bottom}

Declarando-se então o seguinte na linha de comando do Gnuplot:

gnuplot> set key box right bottom outside title ’Funcoes Trigonometricas’
gnuplot> plot cos(x), sin(x)

Figura 2.9: Topo, centralizado ou rodapé.

13
2.7 Fonte
Pode-se alterar o tipo e o tamanho da fonte de todos os argumentos que aparecem no gráfico:
xlabel,ylabel, xtics, ytics, title e key. Este último refere-se ao tamanho do nome da curva
e do tı́tulo da caixa de legenda (ver Cap 3.1). O comando geral é:

gnuplot> set {argumento} font ’<face, size>’

Exemplo:

gnuplot> set xtics font ’arial,12’; set ytics font ’arial,12’


gnuplot> plot sin(x)

Figura 2.10: Fonte e tamanho.

14
2.8 Tı́tulo do gráfico
Para definir ao seu gráfico um tı́tulo utilize:

gnuplot> set title ’Grafico Funcao seno’

Figura 2.11: Tı́tulo de um gráfico.

15
Capı́tulo 3

Argumentos do comando plot

No capı́tulo 2 vimos como plotar a curva de uma dada função e a partir de um arquivo de
dados. Aprendemos as principais edições que podem ser realizadas ao gráfico. Agora veremos
como nomear a curva, editar a cor e escolher entre usar linhas ou pontos. A forma geral com
alguns argumentos omitidos é:

plot {"<datafile>"} {using <X:Y>} {<title-spec>} {with <style>}

Os dois primeiros argumentos foram explicados no capı́tulo anterior.

3.1 Nomeando as curvas - plot title


Para definir um tı́tulo diferente a cada curva no gráfico adiciona-se title ao comando plot.
Veja este exemplo com duas curvas:

gnuplot> plot sin(x) title ’Seno’, cos(x) title ’Cosseno’

Repare que a vı́rgula neste caso faz a função de plotar duas curvas em um mesmo gráfico.

16
Figura 3.1: Definindo tı́tulo às curvas.

3.2 O argumento with


Quando se plota um gráfico a partir de um arquivo de dados, automaticamente a curva
é representada por pontos, diferente de quando se plota uma função (linhas). Há diversas
formatações possı́veis. No nosso caso vale ressaltar apenas 3 casos: lines, points e dots.
Linhas são melhores para representar curvas bem comportadas enquanto que pontos são melhor
utilizados no caso oposto.

17
Vejamos a diferença destas configurações para um dado arquivo de saı́da:

with lines:

Figura 3.2: Arquivo de dados - with lines

with points:

Figura 3.3: Arquivo de dados - with points

18
with dots:

Figura 3.4: Arquivo de dados - with dots

Neste último mal podemos visualizar o formato da curva, esta configuração é melhor para
situações em que temos uma maior quantidade de dados.
Para os dois primeiros casos: lines e points, podemos formatar cor e tamanho (dots apenas
muda o primeiro).

3.2.1 Alterando a cor - linecolor

Mesmo levando o nome linecolor, este argumento também funciona para dots e points.
Veja este exemplo:

gnuplot> plot sin(x) with lines linecolor 48

19
Figura 3.5: Plot sin(x) com cor alternativa.

Sim, as cores são definidas por números, e portanto, é necessário consultar a seguinte
tabela:

Figura 3.6: Tabela de cores e estilos.

Estes diferentes sı́mbolos que aparecem do lado direito dos números podem ser escolhidos

20
utilizando-se do argumento linestyle e deve ser aplicado apenas com with points.

3.2.2 Largura da linha - linewidth

Para uma apresentação do seu trabalho, a curva deve estar bem evidente. Para aumentar a
largura da linha utiliza-se:

gnuplot> plot sin(x) with lines linewidth 10

A diferença se torna evidente:

Figura 3.7: Editando a largura da linha.

Para with points será obtido um efeito geralmente indesejado.

21
Capı́tulo 4

Argumentos do comando multiplot

Como visto no capı́tulo anterior, podemos plotar duas diferentes curvas em um mesmo
gráfico. No entanto, dependendo do formato da curva, o gráfico resultante pode parecer des-
ordenado, com visualização dificultada. Uma alternativa é gerá-los numa disposição de uma
tabela. Pode-se dispor um gráfico do lado do outro, um embaixo do outro, todos em uma
mesma figura, página ou janela. Utiliza-se o comando multiplot, que tem a seguinte forma:

gnuplot> set multiplot {title <page title> {font <face>,<size>} }


{layout <rows>,<cols>} {rowsfirst |columnsfirst } {downwards |upwards}

E para desativar, utilizar o comando padrão:

gnuplot> unset multiplot

Pode-se simplesmente declarar:

gnuplot> set multiplot


multiplot>

Uma janela se abrirá, significando que você agora está no ambiente multiplot. Atenção,
para definir estes argumentos ao multiplot, deve-se também executá-los em uma única linha.

22
4.1 Tı́tulo e Fonte
Como explicado, uma janela em branco se abrirá após a entrada no ambiente multiplot,
agora você pode editá-lo de várias formas. Desta vez para inserir um tı́tulo e editar a fonte,
devemos fazer uma única declaração, não podendo ser divida em duas. De fato, pode-se definir
um tı́tulo sem especificar a fonte, mas nunca ao contrário. Segue o exemplo:

multiplot> set multiplot title ’Funç~


oes Trigonométricas’ font ’arial,18’

Figura 4.1: Multiplot: definindo o tı́tulo e respectiva fonte.

23
4.2 Layout
Agora um exemplo de como podemos plotar vários gráficos em uma mesma tela, imagem ou
página. Seja o seguinte comando:

multiplot> set multiplot title ’Funç~


oes Intrı́nsecas’ font ’arial,18’ layout
2,2
multiplot> plot cos(x); plot sin(x); plot tan(x); plot log(x)

Ou seja, estou dispondo os gráficos em 2 linhas e 2 colunas. O resultado é:

Figura 4.2: Ordenando os gráficos.

Repare neste outro detalhe, há uma ordem em que os gráficos foram inseridos. Primeira-
mente plotei a função cosseno, depois seno, tangente e então a função logarı́tmica na base e. Os
gráficos foram inseridos de forma que se preencheu primeiramente as linhas, de cima a baixo.

24
4.3 Disposição dos gráficos
Para mudar a ordem com a qual os gráficos serão dispostos utilizamos os últimos dois argu-
mentos explicitados no começo deste capı́tulo. Para que sejam inseridos preenchendo primeira-
mente as colunas usa-se columnsf irst, para linhas rowsf irst. Por padrão o gnuplot insere
primeiro as linhas, de cima para baixo (rowsf irst e downwards). Vamos agora mudar com-
pletamente a forma com a qual são dispostos os gráficos para verificar o resultado.

multiplot> set multiplot layout 2,2 columnsfirst upwards


multiplot> plot cos(x); plot sin(x); plot tan(x); plot log(x)

Figura 4.3: Alterando ordem da inserção dos gráficos.

Ou seja, estamos os inserindo de baixo para cima, preenchendo completamente as colunas.

25
Capı́tulo 5

Arquivos de Saı́da

5.1 PDF,JPG
É inegável a importância de se armazenar um gráfico na memória do computador, pendrive,
cd e etc. Muito foi explicado sobre como editar e plotar, mas nada sobre como salvar um gráfico
em um formato e tamanho especı́fico. Para tal, usa-se os seguintes comandos:

gnuplot> set terminal { pdf |jpeg } { size <width>,<height> }


gnuplot> set output ’graph.<pdf |jpeg >’

A primeira declaração informa ao Gnuplot que a imagem a ser salva estará no formato
especificado. A segunda informa o nome do arquivo. Atenção, a extensão .jpeg e .pdf é
obrigatória ao final do nome do arquivo. Para pdf, size será definido em inch, ou in (polegadas),
em jpeg size será definido em pixels.
Exemplo:

gnuplot> set terminal jpeg size 1280,680


gnuplot> set output ’plutao-obliquidade.jpeg’

As dicas referentes à melhor fonte, tamanho e formato serão encontradas no capı́tulo


seguinte.

26
Capı́tulo 6

Script GNU

Até agora vimos as declarações mais importantes para edição de gráficos no Gnuplot. Com
o tempo você verá que ficará cansativo fornecer ao Gnuplot, todas as vezes, tantas declarações.
Para resolver este problema criamos scripts prontos que contém todos os comandos necessários.
Desta forma você poderá visualizar mais facilmente todas as opções escolhidas. A estrutura
do script é basicamente composta por todos os comandos que você digitaria antes de plotar o
seu gráfico, somado com o comando de plot. Vejamos um exemplo:

# Gnuplot
set terminal pdf
set output ’cic-presentation1.pdf’
set xlabel ’Tempo (anos)’; set ylabel ’Obliquidade - Plutao (graus)’
set title ’Comparando com Dobrovolskis et al. (1997)’
set xtics 2000000

#### Formatando fonte ####


set key font ’arial,9’;set tics font ’arial,8’
set xlabel font ’arial,8’;set ylabel font ’arial,8’
set title font ’arial,8’
##########################

plot ’Charon-on(common).dat’ using 1:7 with lines lc 1 title ’Resultados’


# fim

27
O caractere # caracteriza a linha como comentário, ou seja, tudo que vier em seguida será
ignorado pelo compilador do Gnuplot. Para executar um script, o código deve ser escrito em
um arquivo de texto qualquer, de preferência crie com uma extensão intituiva, por exemplo,
’grafico.gnu’.
Criado o arquivo de texto, dê o seguinte comando no terminal do linux (atenção, não abra
o gnuplot):

Figura 6.1: Executando um script.

E o gráfico será gerado com todas as opções escolhidas.


Geralmente é vantajoso gerar o gráfico em formato pdf pela sua ótima qualidade. Poste-
riormente pode ser facilmente convertido para jpeg pelo terminal do linux. Para tal, utilize o
seguinte comando:

Figura 6.2: Convertendo arquivos.

Onde o argumento density denota o número de pixels por polegada.


Observação importante: os argumentos definidos no script da página anterior contém em
maior parte as melhores opções que podem ser escolhidas para gerar um bom gráfico, com
exceção dos nomes fornecidos ao tı́tulo, labels e etc.

28
6.1 Exemplo - Multiplot
Em um arquivo de dados temos os seguintes valores:

Figura 6.3: Arquivo de dados.

O que pode ser visto na figura é apenas uma fração dos dados. Em suma, a coluna 1 é
o tempo em anos, a coluna 3 nos fornece um ângulo que representa a precessão de um dado
planeta (h de Andoyer) e a coluna 7 a obliquidade (Epsilon). Deseja-se plotar 2 gráficos, um
abaixo do outro, com os eixos nomeados de forma correta.
Vamos definir uma fonte que seja ideal e inserir a caixa de legendas em um local apropriado,
para cada gráfico. O resultado deve ser gravado em eps. Antes de tudo, declarar o terminal,
o output e o ambiente multiplot com seus respectivos argumentos.

29
Script:

#### Gnuplot ####


set terminal epscairo
set output ’andoyer-epsil.eps’
# Iniciando Ambiente Multiplot
set multiplot layout 2,1 title ’Din^
amica de Plut~
ao’ downwards
# Formatando a fonte
set key font ’arial,9’
set tics font ’arial,8’
set xlabel font ’arial,8’
set ylabel font ’arial,8’
# Posiç~
ao da caixa de legenda
set key box outside right top
# PLOT 1 - Coluna 3 - h(andoyer)
set xlabel ’Tempo (anos)’; set ylabel ’h-Andoyer (graus)’
plot ’Charon-on(common).dat’ using 1:3 with lines linecolor 1 title ’h-andoyer’
# PLOT 2 - Colune 7 - Obliquidade
set ylabel ’Obliquidade (graus)’
plot ’Charon-on(common).dat’ using 1:7 with lines linecolor 7 title ’Obliquidade’
# Fim do Script GNU

30
Executando o scritp geramos:

Figura 6.4: Imagem de saı́da.

31
Capı́tulo 7

Integrando o Gnuplot ao Fortran 90/95

7.1 Fortran 90/95 - CALL SYSTEM


Uma das grandes vantagens, talvez a mais notória, de se utilizar o Gnuplot é a integração que
é possı́vel realizar com um programa Fortran 90/95. Muitos programadores utilizam o Fortran
77. Uma das razões se dá pelo fato de que algumas rotinas ainda não foram reescritas em
formatos mais modernos. No entanto, se você programa em fortran 77 não há problema nenhum
em adicionar uma declaração de Fortran 90/95, desde que esteja utilizando um compilador de
Fortran 90/95. Algumas declarações foram mantidas e hoje são consideradas obsoletas.
Como foi visto no capı́tulo anterior, através de um script, por um comando do terminal do
linux, compilamos o arquivo e executamos as ações declaradas, desde simples formatações a
gerações de gráficos.
A chave para essa ligação está na declaração fortran CALL SYSTEM ( ). Através desta ex-
ecutamos qualquer ação no terminal linux por meio do programa Fortran. Exemplo:

program gnu integracao


! Proposta:
! Criar uma pasta chamada Gnuplot
CALL SYSTEM ("mkdir Gnuplot")
end program gnu integracao

E uma pasta será criada exatamente no mesmo lugar que o programa foi executado.

32
7.2 Exemplo: Programa pronto
A seguinte rotina tem a função de, através de uma variável caractere que é fornecida pelo
programa principal, gerar um script gnu, executá-lo e organizar os gráficos de saı́da em pastas.

SUBROUTINE GNU (f name)

! Proposta:
! O programa escreve um algoritmo num arquivo de extens~
ao ’.gnu’, que
! tem como funç~
ao gerar 3 gráficos ’.pdf’. A princı́pio, o programa foi
! escrito em fortran 90/95, porém pode ser convertido facilmente para
! fortran 77. Funciona de complemento para o programa:
! - PLAN-D-02-JULHO-13.FOR
! Alguns recursos foram adicionados ao programa:
! - O arquivo gnu é executado automaticamente, gerando os 3 gráficos.
! - Converte os arquivos pdf --> jpg.
! - Cria uma pasta e move os arquivos jpg, pdf e dat referentes à
! saı́da de integraç~
ao e às condiç~
oes iniciais do satélite.
!
! Manual de variáveis:
! - f name: string referente ao arquivo da saı́da de integraç~
ao do
! programa principal a ser executado. O nome do arquivo gnu depende
! desta variável.
! - PLOT 1,2,3: Refere-se diretamente ao nome da variável a ser
! plotada. O tı́tulo, o nome do arquivo pdf e jpg depender~
ao automati-
! camente desta string (ver programa).
! - K 1,2,3: Coluna onde está contida a variável 1,2,3.
! - Todas as outras variáveis est~
ao explicadas por si só.
!
! Registro de revis~
oes:
!
! Data Programador Descriç~
ao da mudança
! ==== =========== ==================
! 15/01/2015 L. D. S. Trotta Código original

33
IMPLICIT NONE

! Declarando variáveis:
CHARACTER(30) :: f name ! Referente ao arquivo output
CHARACTER(40) :: gnuplot ! Referente ao arquivo .gnu

! Atributos de interface dos gráficos:

! Variáveis.
CHARACTER(30), PARAMETER :: PLOT 1=’h-andoyer’
CHARACTER(30), PARAMETER :: PLOT 2=’OBLIQUIDADE’
CHARACTER(30), PARAMETER :: PLOT 3=’INCL SAT’

! Nome dos eixos cartesianos - GNU


CHARACTER(30), PARAMETER :: xlabel="’Tempo (anos)’"
CHARACTER(30), PARAMETER :: ylabel 1="’h(andoyer) - (graus)’"
CHARACTER(30), PARAMETER :: ylabel 2="’OBLIQUIDADE - (graus)’"
CHARACTER(30), PARAMETER :: ylabel 3="’INCL SAT - (graus)’"

! Define a coluna do eixo das ordenadas - GNU


CHARACTER, PARAMETER :: K1=’3’ ! Referente a coluna do output.
CHARACTER, PARAMETER :: K2=’7’ ! Referente a coluna do output.
CHARACTER, PARAMETER :: K3=’9’ ! Referente a coluna do output.

! Tı́tulo do plot - GNU


CHARACTER(30), PARAMETER :: PLOT 1 T= TRIM(PLOT 1) // ’ x Tempo’
CHARACTER(30), PARAMETER :: PLOT 2 T= TRIM(PLOT 2) // ’ x Tempo’
CHARACTER(30), PARAMETER :: PLOT 3 T= TRIM(PLOT 3) // ’ x Tempo’

! Nome dos plot’s em pdf - GNU


CHARACTER(30), PARAMETER :: PLOT 1 PDF = TRIM(PLOT 1) // ’.pdf’
CHARACTER(30), PARAMETER :: PLOT 2 PDF = TRIM(PLOT 2) // ’.pdf’
CHARACTER(30), PARAMETER :: PLOT 3 PDF = TRIM(PLOT 3) // ’.pdf’

34
! Nome dos plot’s em jpg - GNU
CHARACTER(30), PARAMETER :: PLOT 1 JPG = TRIM(PLOT 1) // ’.jpg’
CHARACTER(30), PARAMETER :: PLOT 2 JPG = TRIM(PLOT 2) // ’.jpg’
CHARACTER(30), PARAMETER :: PLOT 3 JPG = TRIM(PLOT 3) // ’.jpg’

! Gera arquivo .gnu


gnuplot = ’GNU-’ // TRIM ( f name ) // ’.gnu’
WRITE(*,*) "O script ’.gnu’ será salvo em: "
WRITE(*,*) gnuplot
WRITE(*,*) "Escrevendo script, aguarde ... "
open(111,file=gnuplot,status=’unknown’)
WRITE(111,*) ’ #### GNUPLOT ####’
WRITE(111,*) ’ set terminal pdf’

! Plot 1.
WRITE(111,*) ’ # ’,PLOT 1,’#’
WRITE(111,*) "set output ’"//TRIM (PLOT 1 PDF)//"’"! set output.
WRITE(111,*) "set title ’"//TRIM(PLOT 1 T)//"’"! set title.
WRITE(111,*) ’set xlabel ’,xlabel ! set xlabel
WRITE(111,*) ’set ylabel ’,ylabel 1 ! set ylabel
WRITE(111,*) "plot ’"// TRIM ( f name ) // "’ using 1:"// K1 //
+ "title ’"// TRIM ( PLOT 1 ) // "’"! PLOT

! Plot 2.
WRITE(111,*) ’ # ’,PLOT 2,’#’
WRITE(111,*) "set output ’"//TRIM (PLOT 2 PDF)//"’"! set output.
WRITE(111,*) "set title ’"//TRIM(PLOT 2 T)//"’"! set title.
WRITE(111,*) ’set xlabel ’,xlabel ! set xlabel
WRITE(111,*) ’set ylabel ’,ylabel 2 ! set ylabel
WRITE(111,*) "plot ’"// TRIM ( f name ) // "’ using 1:"// K2 //
+ "title ’"// TRIM ( PLOT 2 ) // "’"! PLOT

! Plot 3.
WRITE(111,*) ’ # ’,PLOT 3,’#’

35
WRITE(111,*) "set output ’"//TRIM (PLOT 3 PDF)//"’"! set output.
WRITE(111,*) "set title ’"//TRIM(PLOT 3 T)//"’"! set title.
WRITE(111,*) ’set xlabel ’,xlabel ! set xlabel
WRITE(111,*) ’set ylabel ’,ylabel 3 ! set ylabel
WRITE(111,*) "plot ’"// TRIM ( f name ) // "’ using 1:"// K3 //
+ "title ’"// TRIM ( PLOT 3 ) // "’"! PLOT

! Fechando o arquivo .gnu para ser executado posteriormente.


close(111)

! Cria uma pasta baseada em f name


WRITE(*,*) "Criando pasta para armazenamento "
CALL SYSTEM ( ’mkdir FILE-’ // TRIM(f name) )

! Executando o arquivo GNUPLOT


WRITE(*,*) "Gerando os gráficos em formato .pdf "
CALL SYSTEM ( ’gnuplot ’ // gnuplot )

! Convertendo .pdf para .jpg


WRITE(*,*) "Realizando a convers~
ao ’pdf’ --> ’jpg’..."
CALL SYSTEM ( ’convert -density 800 ’ // PLOT 1 PDF // ’ ’ //
+ PLOT 1 JPG )
CALL SYSTEM ( ’convert -density 800 ’ // PLOT 2 PDF // ’ ’ //
+ PLOT 2 JPG )
CALL SYSTEM ( ’convert -density 800 ’ // PLOT 3 PDF // ’ ’ //
+ PLOT 3 JPG )

! ao) e .pdf e .jpg > PASTA


Move o arquivo output (saı́da de integraç~
WRITE(*,*) "Movendo arquivos para pasta recém criada "
CALL SYSTEM ( ’mv *.jpg *.pdf ’// TRIM( f name ) // "COND* "//
+ ’ FILE-’ // TRIM ( f name ) // ’/’ )
CALL SYSTEM ( "cp data* FILE-"// TRIM ( f name) // ’/’ )

end subroutine GNU

36
Referências

http : //www.gnuplot.inf o/docs4 .4/gnuplot.pdf

37

Você também pode gostar