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.
Wow!!!!!!
ResponderBorrarMaravilloso! 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!
de nada... excelente que te haya servido....
BorrarGracias Fernando por el aporte excelente, un código sencillo y legible para comprender rápidamente el funcionamiento de gnuplot con C++. Felicitaciones.
ResponderBorrarGracias por comentar.
BorrarDe nada, es un placer compartir conocimiento.
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.
ResponderBorrarQué tal, es bueno saber que te haya servido.
BorrarMe 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.
quisiera saber como se gráfica graficas simultaneas en la misma ventana
ResponderBorrarGracias por preguntar.
BorrarSinceramente, 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
Me aparece "gnuplot" no se reconoce como un comando interno o externo. No sé como arreglarlo ayuda
ResponderBorrarTienes que instalar el paquete primero, dependiendo de la distro linux que estés usando, primero instala gnuplot
BorrarEstoy haciendo un proyecto en lenguaje C con el compilador dev C++
ResponderBorrarMe gustaría saber como puedo ligarlos, me ayudaría mucho, porfa
A qué te refieres con ligar? en cuál SO? O cómo?
Borrar