logo
Secciones

Entradas del blog


Graficar puntos en Gnuplot desde C

8 comentarios


En ocasiones es necesario realizar gráficas de alguna función o simplemente la graficación de puntos. Ésta tarea es simple de realizar desde gnuplot, suponiendo que se use alguna distro de linux. En algunos casos es necesario usar algún programa o software intermedio para realizar dicha gráfica, tal podría ser el caso de realizar un programa en c, y desde ahí generar los puntos y automáticamente graficarlos.
Cuando es la primera vez que se hace esto es un poco complicado. Aquí les traigo un ejemplo para ir comenzando con esto:

/*http://umencs.blogspot.mx/2013/05/plotting-creating-graphs-in-c-c.html File Name: GraphPlotting.c*/
/*
* Autor: gXfer
* Nombre del archivo: graficarGnuplotDesdeC.c
* Descripción: Grafica en gnuplot los puntos ordeandos e inicializados
* en los arreglos (valoresX, valoresY)
* 10-octubre-2014*/

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#define NUM_PUNTOS 11
#define NUM_COMANDOS 4

int main(){
// X, Y valores de los puntos a graficar
double valoresX[NUM_PUNTOS] = {0.0, 1.0, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0};
double valoresY[NUM_PUNTOS] = {4.0, 4.0, 0.0, 1.0, 0.0, 1.5, 0.0, 1.0, 0.0, 0.5, 0.0};
register int i=0;
/* se crea y se abre el archivo puntosGraficar.txt en modo escritura
* para almacenar los valores de x y y que están declarados en los arreglos
* valoresX y valoresY*/
FILE * archivoPuntos = fopen("puntosGraficar.txt", "w");

/*Guardar los puntos x,y en el archivo de texto creado y abierto previamente*/
for (i=0;i<NUM_PUNTOS;i+ +){
fprintf(archivoPuntos, "%lf %lf n", valoresX[i], valoresY[i]);
}

/*lista de comandos para ejecutar y configurar la visualización que tendrán
* los puntos en la gráfica con gnuplot*/
char * configGnuplot[] = {"set title "gXfer Graficando puntos - unir con líneas"",
"set ylabel "----grado de membresía--->"",
"set xlabel "----Universo X--->"",
"plot "puntosGraficar.txt" using 1:2 with lines"
};

/*Se crea una archivo de tipo poen, es una tebería IPC que se usa, para
* ejecutar gnuplot y enviarle el archivo a graficar*/
FILE * ventanaGnuplot = popen ("gnuplot -persist", "w");
// Executing gnuplot commands one by one
for (i=0;i<NUM_COMANDOS;i+ +){
fprintf(ventanaGnuplot, "%s n", configGnuplot[i]);
}
fclose(archivoPuntos);
return 0;
}

Si usas geany para compilar y ejecutar tus códigos en C, es necesario hacer las siguientes configuraciones: 
Ir a la opción construir y seleccionar de la lista desplegable la opción que dice "Establecer comandos de construcción" como se muestra en la siguiente imagen.

Abrirá una ventana como se muestra en la imagen de abajo, en la opción que dice "Compilar" deben agregar la sintaxis "-lm" sin comillas, lo mismo deben de hacer en la línea de que dice "Construir", agregar "-lm" sin comillas. y listo, le dan en aceptar y pueden compilar como normalmente lo hace.


Para compilar: ir al directorio que ha sido guardado previamente:
gcc -Wall graficarGnuplotDesdeC.c -lm -o graficarGnuplotDesdeC
Para ejecutar el resultado introduce en la línea de comandos:
./graficarGnuplotDesdeC.c

La salida es la siguiente:



Si tienen dudas no olviden comentar.

Comentarios:

  • Fernando Merino
    hace 6 años
    Gracias por preguntar.

    Sinceramente, eso no lo hice, pero tengo la idea de que si pones en el archivo .dat los puntos en varias columnas, y pertencen a diferentes gráficas, desde gnuplot, puedes investigar para que tome cada columna como diferente valor de x y así graficarlas por separado sobre la misma ventana
  • Andres martinez
    hace 6 años
    quisiera saber como se gráfica graficas simultaneas en la misma ventana
  • Fernando Merino
    hace 6 años
    Qué tal, es bueno saber que te haya servido.

    Me gustaría ayudarte, pero no entendí exactamente qué es lo que quieres hacer...?

    Dentro de una interfaz? interfaz gráfica? desarrollada en qué? porque podría enviar esta gráfica a una imagen, y de ahí cargar la imagen en tu interfaz, pero no sé qué es lo que deseas hacer exactamente... igual no lo he hecho, pero puedo darte ideas y de ahí basarte para hacerlo.
  • Oscar Guarnizo
    hace 6 años
    Me ayudo mucho este tutorial muchas gracias, pero tengo un problema quiero emplear estas gráficas dentro de una interfaz. ¿Cómo lo podría hacer? Me ayudarías mucho con tu respuesta.
  • Fernando Merino
    hace 7 años
    Gracias por comentar.

    De nada, es un placer compartir conocimiento.
  • Armando Sulbaran
    hace 7 años
    Gracias Fernando por el aporte excelente, un código sencillo y legible para comprender rápidamente el funcionamiento de gnuplot con C++. Felicitaciones.
  • Fernando Merino
    hace 7 años
    de nada... excelente que te haya servido....
  • Bryan Recoder
    hace 7 años
    Wow!!!!!!
    Maravilloso! Funciono asombrosamente, no sabes cuanto tuve que buscar hasta llegar a tu post! Casi me arranco los cabellos de que no sabía como usarlo pero gracias a ti ya todo quedo claro!
Conoce la red social linuxClick
Redes sociales
Accesos directos