Google

terça-feira, 19 de fevereiro de 2008

Utilizando o Gnuplot para gerar gráficos em C++

Uma das alternativas para se criar gráficos a partir de um arquivo .txt com os dados gerados por um programa C++, pode ser Excel, Matlab ou o Gnuplot. Eu em especial prefiro o uso do gnuplot, porque com ele consigo através de comandos C++ linkar com o meu programa e no final de sua execução, gerar automaticamente os gráficos. No começo parece meio complicado, mas depois é fácil de compreender. Primeiramente será necessário colocar o header no inicio do programa .cpp,

#include <unistd.h>

para poder chamar a função "execlp" que será responsável por chamar o script que irá gerar os gráficos do gnuplot. Essa função pode ser chamada da seguinte forma:

execlp("gnuplot","gnuplot","./plot",NULL);

esta função deve ser chamada no final de seu código fonte. Agora que já está pronto no seu código .cpp vamos criar o script, note que o nome do arquivo deve ser o mesmo que está sendo chamado no comando execlp, ou seja, deve se chamar "plot". Abaixo segue o modelo de como se deve criar o script.

reset;
set grid;
set title " ";
set xlabel "X0";
set ylabel "Y0";
plot "file" using 2:3 with lines;
set term postscript enhanced color; set output "planoXY.eps";
replot;
set term x11;
pause -1 "Enter para continuar"

reset;
set grid;
set title " ";
set xlabel "t(s)";
set ylabel "Posicao (rad)";
plot "file" using 1:4 title "theta1" with lines,\
"file" using 1:5 title "theta2" with lines,\
"file" using 1:6 title "theta3" with lines
set term postscript enhanced color; set output "posicao_angular.eps";
replot;
set term x11;
pause -1 "Enter para continuar"

reset;
set grid;
set title " ";
set xlabel "t(s)";
set ylabel "Velocidade (rad)";
plot "file" using 1:7 title "theta1" with lines,\
"file" using 1:8 title "theta2" with lines,\
"file" using 1:9 title "theta3" with lines
set term postscript enhanced color; set output "velocidade_angular.eps";
replot
set term x11;
pause -1 "Enter para continuar"
reset;
set grid;
set title " ";
set xlabel "t(s)";
plot "file" using 1:2 title "y1" with lines,\
"file" using 1:3 title "y2" with lines;
set term postscript enhanced color; set output "evolucao_x_y.eps";
replot
set term x11;
pause -1 "Enter para continuar"

Note que nesse script ele irá gerar o gráfico desejado, após a execução do programa e ainda irá salvar uma imagem com extensão .eps para poder ser usada no latex se for necessário. Se desejar salvar imagem em outra extensão por exemplo .png será necessário apenas alterar set term postscript enhanced color; set output "evolucao_x_y.eps"; por set terminal png; set output " dymx.png ". Escolha o nome da figura de acordo com a sua necessidade.
Download do Exemplo

2 comentários:

Diego disse...

Outra alternativa é utilizar a biblioteca em C para o gnuplot!!

http://ndevilla.free.fr/gnuplot/gnuplot_i-2.10.tar.gz

As funções esta bem documentadas e com exemplos

Momergil disse...

Olá!

Estou testando a biblioteca gnuplot para um software em C que tem por função plotar um gráfico de ECG, ou seja, ele não deve ser plotado pronto de uma só vez na tela ao final, mas deve ficar plotanto ponto a ponto dentro de uma certa velocidade (a medida que os dados são lidos). Neste caso, eu preciso que o gráfico não apenas plote ponto a ponto ao invés de tudo de uma vez, como também que a biblioteca consiga ler dados de uma outra fonte que não um arquivo txt (imagino que pelo próprio terminal do Linux).

Tem como usar a gnuplot para esse caso?

Abraços!

Postagens populares