martes, 9 de junio de 2009

Trabajando con GDChart

En estos días estaba tratando de crear unas gráficas provenientes de un archivo .csv para obtener los datos y a la final crear un archivo .png.

Existe una excelente herramienta para php que realiza maravillosas gráficas: pChart, sin embargo necesitaba una solución para trabajar con C/C++ y para ello estoy utilizando GDChart, la cual es una librería que nos permite realizar gráficas sencillas.

A continuación un ejemplo de como realizar una gráfica sencilla con lenguaje C/C++ en debian/ubuntu.

apt-get install libgdchart-gd2-xpm-dev libgdchart-gd2-xpm


Crear un archivo ejemplo.c


#include <stdio.h>
#include <gdc.h>
#include <gdchart.h>
#include <gdcpie.h>

main()
{
float a[3][10] = {{10,12,50,30,10,78,12,50,30,10},{12,50,30,10,78,12,50,30,10,45},{50,30,10,78,12,50,30,10,45,6}};

char *t[10] = { "1", "", "", "", "", "", "","","","F"};
unsigned long sc[2] = { 0xFF8080, 0x8080FF };

GDC_BGColor = 0xFFFFFFL; /* backgound color (white) */
GDC_LineColor = 0x000000L; /* line color (black) */
GDC_SetColor = &(sc[0]); /* assign set colors */

GDC_image_type = GDC_PNG;
/* ----- call the lib ----- */
GDC_out_graph( 800, 220, /* short width, height */
stdout, /* FILE* open FILE pointer */
GDC_LINE, /* GDC_CHART_T chart type */
10, /* int number of points per data set */
t, /* char*[] array of X labels */
3, /* int number of data sets */
(float*)a, NULL ); /* float[] data set 1 */

return 0;
}

Luego compilar y aqui viene la parte importante:

gcc ejemplo.c -o ejemplo -lgdc -D HAVE_LIBFREETYPE

Por ultimo ejecutar el archivo y colocarlo en un archivo .png

./ejemplo > salida.png



Esta librería la pienso utilizar momentáneamente, pero trataré de portar pChart a C++.

Nota, estoy trabajando ahora en la parte para leer el archivo csv...

2 comentarios:

  1. Buenos días, estoy tratando de compilar este ejemplo pero no me deja compilar ya que me salen los siguientes mensajes:

    g++ -o "pie" ./gdc_pie_samp.o -lgdc -lm
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_ticks' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_hard_grapheight' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_YTitle2Color' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_title_font' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_yaxisfont_size' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_xaxisfont_size' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_ytitle' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_xtitle_ptsize' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_HLC_style' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_xtitle_size' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_xlabel_ctl' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_ylabel_fmt' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_yaxis' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_XLabelColor' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_YTitleColor' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_XTitleColor' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDCPIE_label_font' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_0Shelf' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_SetColor' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_hard_xorig' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDCPIE_title_ptsize' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_annotation' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_HLC_cap_width' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_GridColor' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_stack_type' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_yaxis2' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_annotation_font_size' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_num_scatter_pts' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_xaxis_ptsize' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_ylabel2_fmt' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_requested_ymax' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_PlotColor' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_requested_ymin' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_3d_angle' sin definir
    /usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/libgdc.so: referencia a `GDC_grid' sin definir
    collect2: error: ld returned 1 exit status
    make: *** [pie] Error 1

    Cual es el error?

    ResponderEliminar
  2. Buenas noches, que significa la expresion -D HAVE_LIBFREETYPE? como la configuro en eclipse?

    ResponderEliminar