O gnuplot é um dos programas mais poderosos para plotar gráficos em 2D e 3D de funções ou arquivos de dados. Algumas de suas características são:
É multiplataforma, podendo ser utilizado em Windows, Linux, Mac, Android etc.
Os gráficos podem ser plotados interativamente, executando comandos na janela de comandos ou automaticamente, executando-se um arquivo de comandos previamente gravado, comumente denominado de script.
Os comando são de fácil memorização, como plot para plotar.
É muito rápido e não requer computadores de última geração podendo ser executado mesmo em máquinas mais modestas. Mesmo arquivos com milhares de linhas de dados são plotados num piscar de olhos.
Obs.: A pronúncia original de gnuplot é como "new plot", (novo gráfico, em inglês), porém, em português do Brasil, é comum a pronúncia "guinuplot".
Alguns exemplos de gráficos feitos com o gnuplot são mostrados a seguir:
O gnuplot pode ser instalado em Linux, OS/2, MS Windows, Mac OS, VMS e muitas outras plataformas. O programa pode ser compilado a partir do código fonte ou pode ser utilizado um instalador para a plataforma desejada.
Para usuários do ...
Windows 64 bits, a versão 6.0.1, liberada em maio de 2024, pode ser baixada daqui.
Linux é só utilizar o gerenciador de pacotes da distribuição.
Mac OS, basta usar o gerenciador de pacotes homebrew
A versão estável mais recente do gnuplot pode ser obtida a partir de sua Página Inicial.
No Windows 11, por meio do Menu Iniciar, chega-se ao seguinte Menu do gnuplot:
Para iniciar o gnuplot, clique no primeiro ícone da lista e uma janela gráfica para entrada de comandos será exibida.
A janela gráfica para entrada de comandos é útil para usuários que ainda não estão familiarizados com os nomes dos comandos do gnuplot para plotar e configurar os gráficos, por exemplo, pois esses comandos podem ser gerados através dos menus.
O segundo item no Menu do gnuplot inicia a janela para entrada de comandos em modo texto. Essa janela não possui os menus "File", "Plot", etc., da janela gráfica, mas requer menos memória e pode ser útil em computadores com menos recursos ou se você já está familiarizado com os comandos do gnuplot e não precisa de ajuda dos menus presentes na janela gráfica. A seguinte imagem ilustra a janela de comandos em modo texto.
Os demais ícones do Menu do gnuplot no Windows 11 referem-se a uma pasta com scripts para demonstrar diversos tipos de gráficos e recursos do gnuplot, documentação de ajuda e o link para a Página inicial do gnuplot.
No Linux, pode-se clicar no ícone do gnuplot ou simplesmente digitar gnuplot no terminal de comandos:
A linguagem de comandos do gnuplot possui as seguintes características:
Na janela de comandos, o texto gnuplot> no início da linha é chamado de prompt e indica que o gnuplot está pronto para receber comandos, que devem ser digitados após o gnuplot>. Por exemplo: gnuplot> plot cos(x);
Faz diferença entre maiúscula de minúscula, portanto, o comando plot não pode ser digitado Plot. A variável "nome" é diferente da variável "Nome";
Todos os nomes de comando podem ser abreviados, desde que a abreviação não seja ambígua. Assim, print, prin, pri e pr podem ser usados igualmente;
Mais de um comando podem ser digitados na mesma linha, separados por ";". Por exemplo, a = 10; print a;
Cadeias de caracteres (strings) podem, em geral, ser digitadas entre aspas simples ou duplas, embora haja algumas diferenças eventualmente. Assim, os dois comandos a seguir são idênticos:
gnuplot> set title "Meu Gráfico"
gnuplot> set title 'Meu Gráfico'
Comandos muito longos podem ser "quebrados" em duas ou mais linhas desde que as linhas, com exceção da última, sejam terminadas por " \" (espaço seguido por "\"). Exemplo:
gnuplot> set title 'Esse é o meu \
> primeiro gráfico em gnuplot';
Note que o prompt na segunda linha muda de gnuplot> para somente >, indicando que o comando é continuação da linha anterior.
Além de ser útil na visualização gráfica de dados e funções, o gnuplot pode ser útil para realizar cálculos envolvendo funções matemáticas. Por exemplo para saber quanto é o logaritmo natural de 10, basta dar o seguinte comando:
gnuplot> pr log(10)
em que abreviamos o comando "print" por "pr".
Símbolo Exemplo Explicação
** a**b exponenciação
* a*b multiplicação
/ a/b divisão
% a%b resto (da divisão de números inteiros)
+ a+b adição
- a-b subtração
! a! fatorial de a
| | |a| número de elementos da lista (array) a
Parênteses pdoem ser usados para mudar a prioridade das operações. Note que:
-2**2 = -4,
mas (-2)**2 = 4
Para extrair a raiz quadrada de um número x use a função sqrt(x)
Para uma lista mais completa digite "help operators"
Constantes podem ser dos tipos:
Inteiro
-5, 0, 10
011 (11 em octal, pois inicia com "0". 011 = 9 em decimal)
0x11 (11 em hexadecimal, pois inicia com "0x". 0x11 = 17 em decimal)
0X11 (11 em hexadeciaml poi inicia com "0X". 0x11 = 0X11)
Real (ponto flutuante)
1.0 ou -2.32
5. ou 23. ou -5.
1e2 ou 1E2 (= 100.0)
6.32e-1
Complexo
{1.2, -3.4}
1.2 -3.4*I
String (cadeia de caracteres)
"Item 123.456"
"Linha 1\nLinha 2" (entre aspas duplas, \n é interpretado como nova linha)
'Linha 1\nLinha 1' (entre aspas simples \ é somente um caractere)
pi: 3.14159265358979...
NaN: indica um valor indefinido ("Not a Number")
I: unidade imaginária dos números complexos. I = raiz(-1) = {0, 1}
sqrt raiz quadrada
abs valor absoluto . abs(x) = sqrt(x**2)
int, ceil, floor
sin, cos, tan, asin, acos, atan
sinh, cosh, tanh, asinh, acosh, atanh
log, log10, exp
real, imag, complex
time, strftime, strptime
word, words, etc
Para uma lista mais completa digite "help expressions" e escolha o subtópico "functions".
Para obter ajuda sobre uma função específica digite "help <nome da função>"
Para plotar o gráfico de uma função qualquer como, por exemplo, y = cos(x), basta digitar na janela de comandos do gnuplot:
gnuplot> plot cos(x)
e será imediatamente exibido o gráfico seguinte:
Na parte superior da janela do gráfico, temos alguns ícones (da esquerda para a direita) com as seguintes funções:
Salvar o gráfico;
Replotar;
Mostrar grade;
Zoom prévio (lupa com sinal de menos);
Zoom seguinte (lupa com sinal de mais);
Escala automática (lupa com número 1);
Configurações da janela;
Coordenadas do cursor.
As coordenadas do cursor, item 8, podem estar localizadas em outra posição conforme ajustes na Configurado da janela, item 7.
Para inserir rapidamente uma grade no gráfico recém gerado, com a sua janela selecionada, tecle "g" e teremos o seguinte resultado:
Obs: a tecla de atalho "g", ativa e desativa a grade. Portanto, pressione "g" mais duas vezes e perceba a transição da grade.
Para plotar o gráfico de uma superfície 3D basta usar o comando splot. Por exemplo, para plotar as funções
basta executar o seguinte comando:
gnuplot> splot x**2+y**2, x**2-y**2
e será exibido o gráfico das duas funções:
Como podemos perceber pelo exemplo anterior, podem-se plotar vários gráficos de uma só vez. Por exemplo, digite o comando seguinte para plotar as três funções respectivamente.
gnuplot> plot cos(x), log(x), log(-x)
Um gráfico é constituído por muitos objetos: bordas, eixos, linhas, símbolos, grade, escala usada nos eixos etc. Você deve ter percebido que nos exemplos anteriores não precisamos informar muita coisa sobre esses objetos. Não informamos, por exemplo, que faixa de valores usar no eixo-x e no eixo-y ou que cores e espessura atribuir a cada linha etc. Isso faz do gnuplot uma ferramenta poderosa e prática quando se quer visualizar rapidamente o formato do gráfico de uma função ou de um arquivo de dados. Entretanto, para podermos utilizar esse gráficos em documentos ou artigos é interessante que possamos definir as características dos objetos que constituem o gráfico, seja por questões estéticas ou para respeitar exigências da mídia onde esse gráfico vai ser publicado.
Vejamos alguns objetos que aparecem num gráfico e como são chamados pelo gnuplot.
Todos esses elementos de um gráfico, e alguns que veremos depois, podem ser manipulados. Deixar um gráfico com todas as características desejadas (cores, espessuras, tamanhos etc) pode demorar algum tempo mas depois de alcançado o resultado pretendido, todos os ajustes podem ficar gravados em arquivo para fácil reutilização em outros gráficos.
Após o gnuplot mostrar o gráfico da função (ou funções ou arquivo de dados), é bem comum ser necesária a alteração dos limites mínimos e máximos dos eixos. Isso pode ser feito de várias maneiras.
com o botão direito do mouse
com a roda de rolagem do mouse
com as setas do teclado
com o comando plot
com os comandos set xrange e set yrange
Vamos ilustrar os métodos listados.
gnuplot> plot cos(x)/exp((abs(x)))
Note que , para x entre -10 e 5 ou entre 5 e 10, o gráfico parece ser uma linha reta. Para tirar a dúvida, selecione a área retangular mostrada na figura seguinte, clicando com o botão direito direito do mouse num dos cantos do retângulo, mova o mouse e clique novamente com o botão direito do mouse no outro canto para formar a área retangular.
O gnuplot dará um zoom correspondente à área selecionada:
Agora experimente usar a roda do mouse e note que isso faz deslocar os limites do eixo-y.
Experimente girar a roda do mouse com a tecla Shift precionada e observe o deslocamento no eixo-x.
Experimente girar a roda do mouse com a tecla Control pressionada e observe a mudança no zoom.
Experimente usar as setas direcionais do teclado e observe que o deslocamento dos eixos.
Teste usar as setas com a tecla Shift pressionada e observe que os deslocamentos são maiores.
Após muitas alterações de zoom e deslocamentos dos eixos, pode ser trabalhoso voltar o gráfico ao seu estado inicial, por meio do botão de zoom prévio. Nesse caso basta pressionar a tecla "a" (auto-escala) ou pressionar o botão de escala automática (lupa com o número 1).
Alterando os limites dos eixos com o comando plot
O comando a seguir já define os limites dos eixos:
gnuplot> plot [-6:6] [-0.2:1.0] cos(x)/exp((abs(x)))
Alterando os limites dos eixos com os comandos xrange e yrange
O mesmo resultado seria obtido se usássemos os seguintes comandos:
gnuplot> set xrange [-6:6]
gnuplot> set yrange [-0.2:1.0]
gnuplot> replot
Note que na última linha de comandos, usamos o comando "replot", que executa o último comando plot que havia sido realizado.
A grade, formada pelas linhas horizontais e verticais que "cortam" a área do gráfico, pode ser exibida e ocultada das seguintes formas:
Pressionando a tecla "g", com a janela do gráfico ativa;
Clicando no ícone da grade na parte superior da janela gráfica;
Usando o comando set grid.
Experimente:
Com o gráfico anteriormente plotado, teste os métodos 1 e 2 ;
Deixe o gráfico sem a grade;
digite o comando seguinte:
gnuplot> set grid; replot
Note que agora a grade foi exibida. Note ainda que digitamos dois comandos separados por ";".
O Gráfico seguinte foi exibido:
Observe que a grade deve ser bem suave para não atrapalhar a visualização do gráfico. Entretanto, se quisermos deixarmos a grade mais visível, podemos aumentar sua largura em 20 %, usando o comando seguinte:
gnuplot> set grid lw 1.2
O resultado é mostrado a seguir
O gnuplot gera um gráfico de uma função f(x), utilizando uma linha sólida que é formada pela ligação de vários pontos de coordenadas (x,f(x)). Por exemplo, o gráfico que geramos anteriormente é formado por uma série de pontos como ilustrado a seguir.
Quando unimos os pontos, o gráfico fica assim:
Por padrão o gnuplot usa 100 pontos. Note que nenhum dos pontos ficou ma coordenada (0, 1) mas, se aumentarmos o número de pontos para 101, teremos um ponto nessa coordenada. Para aumentarmos o número de pontos usamos o comando set samples. Digite o comando seguinte:
gnuplot> set samples 101; replot
E teremos o seguinte gráfico
Note que agora o gráfico faz o "bico" correto no ponto de coordenadas (0,1).
Use os seguintes comandos para inserir o título do gráfico e dos eixos:
gnuplot> set encoding utf8
gnuplot> set title 'Meu Primeiro Gráfico'
gnuplot> set xlabel 'Eixo-x'
gnuplot> set ylabel 'Eixo-y'
gnuplot> replot
O primeiro comando seleciona a codificação de caracteres utf8, que foi usada pelo editor de texto para exibir corretamente caracteres acentuados. Existem diversas codificações mas recomendamos usar o utf8 por sua adoção internacional e diversidade de caracteres incluídos.
E teremos o seguinte resultado:
Todos os gráficos plotados até aqui foram gerados digitando-se um comando na janela de comandos do gnuplot. À medida que um gráfico vai ganhando complexidade (várias linhas de comando) é mais prático gravar esses comandos num arquivo de texto chamado de um script e carregar esse arquivo para gerar o gráfico.
Portanto, Um script gnuplot é simplesmente um arquivo de texto puro que contém sucessivos comandos que resultarão no gráfico desejado. Um arquivo de texto puro pode ser gerado com editores de texto puro. Há várias opções para ttodos os sistemas operacionais. Para Windows temos o Bloco de notas ou Notepad, Notepad++, etc. Para Linux temos o emacs, vi, vim, nano, kwrite, kate etc.
Ao gravar seu script pode-se usar qualquer extensão de arquivo, porém, as mais comumente usadas são "plt" e "gp".
Daremos um exemplo de como plotar, no Windows, o gráfico anterior, "Meu Primeiro Gráfico", através de um script. Em outras plataformas o procedimento é semelhante.
1. Usando um editor de texto de sua preferência, abra um arquivo de texto.
Obs: Não use programas como o MS Word pois eles, normalmente, não salvam um arquivo de texto puro.
2. Nesse arquivo, escreva os comandos usados para configurar e plotar o gráfico:
set encoding utf8
set title 'Meu Primeiro Gráfico'
set xlabel 'Eixo-x'
set ylabel 'Eixo-y'
set samples 101
set grid lw 1.2
set xrange [-6:6]
set yrange [-0.2:1.0]
plot cos(x)/exp((abs(x))) lw 2 title 'f(x) = cos(x)/exp{|x|}
Note que, na última linha acrescentamos algumas informações ao comando plot. A abreviação lw refere-se a line width (largura de linha, em inglês). O padrão é lw =1, usando valores maiores que 1, deixamos a linha mais espessa. A palavra-chave "title" usada numa linha do comando plot permite indicar um título (legenda) personalizado.
Perceba que o comando plot ficou extenso. Se acrescentássemos outras informações ou outras funções a serem plotadas seria interessante quebrar o comando em mais de uma linha usando a barra "\" no final das linhas, exceto na última.
3. Salve o arquivo como "primeiro.plt" num diretório (pasta) à sua escolha.
4. Supondo que arquivo tenha sido gravado em "C:\Users\Ricardo\Documents\gnuplot_curso", você poderá plotar o gráfico de 2 formas:
Método 1 (load 'caminho completo')
Carregue o arquivo "primeiro.plt" informando o caminho completo para localizar o arquivo:
gnuplot> load 'C:\Users\Ricardo\Documents\gnuplot\curso\primeiro.plt'
Método 2 (cd e depois load ...)
Primeiro faça gnuplot ir para o diretório onde se oncontra o arquivo "primeiro.plt". Isso pode ser feito via linha de comando ou via interface gráfica (figuras abaixo).
Método 2 via linha de comando:
gnuplot> cd 'C:\Users\Ricardo\Documents\gnuplot\curso'
gnuplot> load 'primeiro.plt'
Método 2 via interface gráfica:
Na Janela de comandos do gnuplot, versão Windows, clique em File e depois em Change Directory ...
Será exibida uma janela para escolha do diretório. Clique em gnuplot_curso e depois em OK.
Agora é só carregar o script:
gnuplot> load 'primeiro.plt'
As figuras seguintes ilustram o arquivo editado e o gráfico apresentado.
Nota: Muitas outras alterações poderiam ser implementadas, se desejado. Por exemplo, poderíamos queres alterar a cor e o estilo da linha, a posição da legenda, o estilo e tamanho da fonte usada, etc. O gnuplot já possui alguns estilos de linha sólida e tracejada. para ver um exemplo dessas linhas e símbolos usados por padrão no terminal que está sendo usado (qt, nos exemplos até aqui), digite o comando test. Veja o resultado apresentado pelo gnuplot.
Na linguagem do gnuplot, terminal representa o tipo de saída a ser gerado. Há terminais cujo tipo de saída é uma janela gráfica na tela do computador, em outros, o tipo de saída pode ser um arquivo em formato pdf ou algum formato de imagem.
O terminal qt envia a saída para uma janela na tela do computador com a opção de salvar o gráfico em alguns formatos de imagem ou pdf, por exemplo, mas também podemos usar um terminal como o png, por exemplo, para controlar com mais detalhes o resultado, definindo algumas características como tamanho, transparência etc.
Para o gnuplot, já foram implementados mais de 70 terminais, entretanto, qualquer usuário só deverá precisar de um número bem pequeno deles. É possível até mesmo não ser necessário se preocupar com nenhum tipo de terminal se o usuário só deseja plotar seus gráficos na tela do computador, pois um terminal que reproduz o gráfico na tela é utilizado por padrão. Voltaremos ao assunto em mais detalhes futuramente.