Avançar para a área de conteúdo

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

A primeira vez que acessar o developerWorks, um perfil será criado para você. Informações do seu perfil (tais como: nome, país / região, e empresa) estarão disponíveis ao público, que poderá acompanhar qualquer conteúdo que você publicar. Seu perfil no developerWorks pode ser atualizado a qualquer momento.

Todas as informações enviadas são seguras.

  • Fechar [x]

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Todas as informações enviadas são seguras.

  • Fechar [x]

Introdução ao gnuplot

Breno Leitão, Engenheiro de software, IBM
Breno Leitão
Breno Leitao é engenheiro de software no Linux Technology Center (LTC) onde atual como desenvolvedor especializado nas áreas de performance, device drivers e virtualização.

Resumo:  Este artigo propõe-se a apresentar a ferramenta GNUPlot, que visa a criação de gráficos de alta qualidade, de uma maneira fácil e simples

Data:  06/Jun/2012
Nível:  Introdutório
Atividade:  1633 visualizações
Comentários:  


Introdução

O gnuplot é uma ferramenta muito útil para desenhar gráficos de maneira muito simples e direta. O gnuplot é uma ferramenta de código aberto e pode ser utilizada em qualquer sistema operacional.

A interface do gnuplot é baseada em console, isto é, toda a configuração do gráfico deverá ser realizada através de comandos no aplicativo, consequentemente, não há interface com o mouse.

Neste artigo, será feita uma introdução à ferramenta, ao modo de instalação e um tutorial de como gerar os gráficos, desde os mais simples até os tridimensionais.


Instalação

A obtenção dos arquivos com o código fonte e a instalação podem ser feitas com os comandos abaixo:

  # wget http://ufpr.dl.sourceforge.net/project/gnuplot/gnuplot/4.4.4/gnuplot-4.4.4.tar.gz
  # tar -xvf gnuplot-4.4.4.tar.gz | tar -xvf -
  # cd gnuplot-4.4.4 
  # configure
  # make install

Após esta etapa, a aplicação será compilada e instalada no sistema operacional. Para assegurar que a aplicação foi gerada corretamente, pode-se executar o seguinte comando e verificar se o gráfico gerado está de acordo com o que deveria:

# gnuplot -e "plot sin(x)"

Neste caso, deve aparecer um gráfico da função seno(x) na tela.

É importante lembrar que muitas distribuições Linux contém o gnuplot no repositório de programas, e bastaria instalá-lo utilizando os comandos de gerenciamento de pacote da distro em questão.


Utilização

Como dito acima, o gnuplot não tem uma interface gráfica, pois esta aplicação não é do tipo WYSIWYG (What You See Is What You Get). Isso significa que o usuário precisa programar o gráfico antes de vê-lo.

Para iniciar o software, basta executar o comando gnuplot e aparecerá uma tela conforme a Figura 1.


  
# gnuplot
	G N U P L O T
    Version 4.4 patchlevel 0
    last modified March 2010
    System: Linux 3.0.0-rc1+

    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'

Terminal type set to 'wxt'
>

Figura 1: Boas vindas do gnuplot

Após inicializado o software, já é possível digitar os comandos que se deseja executar. Os comandos mais simples são os que imprimem funções matemáticas, como seno, cosseno, tangente, etc.

Gráficos a partir de funções matemáticas

Nesta seção será será mostrado como gerar o gráfico da função matemática seno. Para gerar qualquer gráfico (em duas dimensões), deve-se utilizar o comando plot, e como argumento a função que deseja-se imprimir no gráfico. Por exemplo, a linha abaixo desenhará o gráfico do seno, como visto na Figura 2.

> plot sin(x)



Figura 2: Resultado do comando plot sin(x)

Também é possível gerar mais de uma função por gráfico. Para tanto, basta separar as funções por vírgula, conforme o exemplo abaixo. Neste exemplo, são gerados os gráficos das funções seno, cosseno, logaritmo e a função linear com base no X. O resultado pode ser visto na na Figura 3.

> plot sin(x), cos(x), log(x), x/2



Figura 3: Múltiplas funções no gráfico

Gráficos a partir de arquivos

Além dos gráficos de formulas matemáticas, o gnuplot é muito conhecido por ser capaz de desenhar excelentes gráficos a partir de arquivos externos de uma maneira ágil. Um exemplo clássico é mostrar um gráfico a partir de um arquivo texto com vários números.

Para tanto, será gerado um arquivo texto contendo os números de 1 a 100. O arquivo foi gerado utilizando o seguinte script (em bash):

for i in `seq 100`
do
          echo $i >> tmp.txt
done
  

Para gerar o gráfico baseado em um arquivo com dados, basta utilizar o nome do arquivo entre aspas duplas, conforme a seguir:

> plot "tmp.txt"

Essa diretiva imprimirá no gráfico os pontos que estão no arquivo. Note que no eixo X tem-se a posição do ponto no arquivo, assim sendo, o arquivo primeiro ponto, será (1,1), o segundo (2,2) e assim por diante.



Figura 4: Gráfico baseado em um arquivo de pontos

No exemplo anterior, o arquivo de dados continha apenas uma dimensão. É possível gerar gráficos com mais de uma dimensão. Neste exemplo, foi criado um arquivo bem simples que contem um conjunto de pares separados por espaço, que representa os pontos (1,2), (2,4), (3,8), (4,10), (6,2), (7,4) e (8.3). Segue o conteúdo do arquivo:

1 2 
2 4 
3 8 
4 10 
6 2 
7 4 
8 3 
  

Para gerar o gráfico, o mesmo procedimento deverá ser utilizado, porém neste caso, seria interessante ligar os pontos com uma linha, e para tanto, será utilizado a diretiva with lines, que significa que os pontos serão ligados através de uma linha. Note que pode-se utilizar outras diretivas para gerar outros tipos de ligações, como por exemplo, curvas de bezier.

> plot "tmp.txt" with lines



Figura 5: Gráfico com arquivo de entrada em duas dimensões

O resultado poderá ser visto na Figura 5.

Além do mais, é possível gerar gráficos em três dimensões, de uma maneira fácil e prática.

O primeiro exemplo é um gráfico de malha gerado a partir da seguinte função: e

Segue o comando para gerar o gráfico em questão:

> splot x**2 + y**2, x**2 - y**2




Figura 6: Gráfico de malha

O gráfico resultante pode ser visto na figura 5.

Neste caso, será gerado um gráfico de malha com alguns poucos pontos no arquivo de dados, sendo assim:

1 2 4 
2 3 3 
4 3 3 
4 2 4 
5 4 1 
  

Gráficos em três dimensões são gerados a partir do comando splot, ao invés do plot tradicional. O comando splot significa que o gráfico a ser gerado é em três dimensões, enquanto o comando plot gera em duas dimensões. A maneira mais simples de utilizá-lo é conforme este exemplo:

>  splot "tmp3.txt" with lines

A Figura 7 mostra como ficaria o gráfico gerado.



Figura 7: Gráfico tridimensional a partir de um arquivo externo

Exportando o gráfico

Todos os exemplos acima foram gerados na tela do usuário, isto é, é aberta uma janela extra a cada comando de plot. O gnuplot permite que o gráfico seja exportado para um arquivo, sendo possível importá-lo, posteriormente, em algum outro documento, como por exemplo, no OpenOffice, Microsfot Office, LaTeX, etc.

Para exportar um gráfico para um arquivo, deve ser configurado o tipo de arquivo alvo. Para tanto, deve-se usar o comando set terminal e o formato de arquivo de destino, como por exemplo png, corel, jpeg, postscript, pstex, etc.

Desta forma, caso o arquivo de destino seja um gráfico png, deve ser usado o seguinte comando:

> set terminal png

Apos a definição do terminal, é necessário que seja definido o nome do arquivo alvo, caso contrário o arquivo será enviado para a saída padrão (stdout). O nome do arquivo é configurado utilizando o comando set output. Segue um exemplo para exportar um gráfico de seno para o arquivo "saida.png".

  > set terminal png 
  Terminal type set to 'png' 
  Options are 'nocrop font /usr/share/fonts/dejavu/DejaVuSans.ttf 12 size 640,480 ' 
  > set output "saida.png" 
  > plot sin(x) 


Tópicos avançados

O gnuplot é uma ferramenta complexa e extremamente configurável. A maneira mais fácil de evoluir os conhecimentos é olhando exemplos já prontos. Seguem alguns exemplos e links para os códigos fontes destes exemplos.



Figura 6: Coração gerado pelo gnuplot

O código fonte do exemplo da Figura 6 pode ser obtido no link Heart script. Esse é um gráfico e m três dimensões a partir de uma fórmula matemática com a função em questão.

Um outro exemplo fácil e com menos de dez linhas de código é o gráfico na Figura 7. Ele foi gerado a partir de um script localizado em A Virtual Seashells -- Turritella.



Figura 7: Uma concha gerada pelo gnuplot

Etiquetas

Por fim, para colocar nome no gráfico, nas funções e nos eixos, deve-se utilizar os comandos abaixo:

set xlabel “<nome do eixo x>” : Define a etiqueta no eixo X
set ylabel “<nome do eixo y>” : Define a etiqueta no eixo Y
set title “<Nome do grafico>” : Define o nome do gráfico

Além disso, é possível nomear as funções utilizando o parâmetro title "<Nome da função>", para cada função que se deseja imprimir. Por exemplo, o script abaixo gera o gráfico da Figura 8.

    > set title "Meu gráfico"
    > set xlabel "Eixo X"
    > set ylabel "Eixo Y"
    > plot -x title "Função 1", 1/x title "Função 2"
  



Figura 8: Nomeando as entidades do gráfico


Conclusão

Após esta pequena introdução, fica fácil notar a utilidade da ferramenta gnuplot. Apesar da interface ser um pouco diferente do que a maioria das pessoas estão acostumadas, o gnuplot tem um poder de manipular gráficos complexos raramente visto nas outras ferramentas, e portanto, vale a pena ser estudada.


Referências

Arquivos de demonstração para gnuplot
Utilizando o gnuplot para gerar bons gráficos gnuplot tips


Sobre o autor

Breno Leitão

Breno Leitao é engenheiro de software no Linux Technology Center (LTC) onde atual como desenvolvedor especializado nas áreas de performance, device drivers e virtualização.

Ajuda para Relatar Abuso

Relatar abuso

Obrigado. Esta entrada foi sinalizada para atenção do moderador.


Ajuda para Relatar Abuso

Relatar abuso

Falha no envio do Relatório de abuso. Tente novamente mais tarde.


developerWorks: Registre-se


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Selecione seu nome de exibição

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

(Deve possuir de 3 a 31 caracteres.)


Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Classificar este artigo

Comentários

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Linux
ArticleID=819364
ArticleTitle=Introdução ao gnuplot
publish-date=06062012

Conheça a IBM da sua cidade

A IBM está mais perto do que você imagina!