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.

8 comentarios en “Graficar puntos en Gnuplot desde C

  1. 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!

  2. 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.

  3. 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *