PyCha (PYthon CHArts)

Pycha es un paquete Python muy simple para dibujar gráficos estadísticos usando la magnífica librería Cairo. Sus objetivos son:

  • Ligereza
  • Simpleza
  • Buena apariencia con los valores predeterminados
  • Personalización

No dibuja cualquier gráfico imaginable pero dibuja los más típicos de una forma bonita. Quizá te interes mirar otras opciones disponibles por ahí como pyCairoChart

Pycha está basado en Plotr que a su vez está basado en PlotKit. Estas dos librerías están escritas en JavaScript y son estupendas para programación web en el lado del cliente. Yo necesitaba lo mismo para el lado del servidor y por eso traduje Plotr a Python. Ahora podemos mandarle gráficos estadísticos a la gente que tiene JavaScript desactivado o meter dichos gráficos en informes en PDF.

Pycha se distribuye bajo los términos de la Licencia Pública General Menor.

Capturas de pantalla

Ejemplo de gráfico de sectores con el tamaño relativo de cada fichero fuente:

source:/trunk/examples/piechart.png

Otro gráfico con los mismos datos. Esta vez cada barra representa el número de lineas de código fuente de cada fichero fuente:

source:/trunk/examples/vbarchart.png

Ahora con barras horizontales:

source:/trunk/examples/hbarchart.png

Finalmente, la misma información eun gráfico de lineas (áreas):

source:/trunk/examples/linechart.png

Documentación

Instalación

Pycha necesita PyCairo para trabajar ya que usa la librería de gráficos Cairo para dibujar los píxeles. Si usas Linux probablemente ya lo tengas todo instalado y no necesites hacer nada. Si usas Windows estos son los pasos recomendados para instalar PyCairo:

  1. Coge el último instalador de PyCairo para Windows de http://ftp.gnome.org/pub/GNOME/binaries/win32/pycairo/ Necesitas el que coincide con tu versión de Python asi que coge el que acaba en -py2.4.exe si tienes Python 2.4 o el que acaba en -py2.5.exe si tienes Python 2.5
  2. Instálalo en tu entorno Python (simplemente sigue las instrucciones del instalador)
  3. Pon las dlls de Cairo dentro del directorio pycairo que está dentro del directorio site-packages o en cualquier otro sitio que esté en tu path. Puedes encontrar dichas dlls en http://www.gimp.org/%7Etml/gimp/win32/downloads.html Vé allí y bajate los siguientes paquetes:
    1. cairo.zip. Sólo necesitas el fichero libcairo-2.dll dentro de ese zip
    2. libpng.zip. Sólo necesitas el fichero libpng13.dll dentro de ese zip
    3. zlib.zip. Sólo necesitas el fichero zlib1.dll file dentro de ese zip

Pycha se distribuye como un Huevo Python asi que es bastante fácil de instalar. Sólo tienes que escribir el siguiente comando:

easy_install pycha

Y Easy Install irá a la Tienda de queso y se descargará la última versión de pycha para tí. También lo instalará sin ningún coste adicional :-)

Tutorial

Usar pycha es bastante fácil. Siempre se siguen los mismos 5 pasos:

  1. Crea una superficie Cairo para dibujar el gráfico en ella
  2. Construye una lista de conjuntos de datos para crear el gráfico a partir de ellos
  3. Personaliza las opciones del gráfico
  4. Crea el gráfico, añadele los conjuntos de datos y píntalo
  5. Guarda los resultados en un fichero o haz lo que quieras con la superficie de Cairo

Para crear la superficie de Cairo sólo necesitas decirle el tipo de superficie y sus dimensiones

   import cairo
   ancho, alto = (500, 400)
   superficie = cairo.ImageSurface(cairo.FORMAT_ARGB32, ancho, alto)

Después debes crear tu conjunto de datos haciendo una consulta a una base de datos o de cualquier otra forma:

   conjuntoDeDatos = (
     ('datos 1', ((0, 1), (1, 3), (2, 2.5))),
     ('datos 2', ((0, 2), (1, 4), (2, 3))),
     ('datos 3', ((0, 5), (1, 1), (2, 0.5))),     
   )

Como puedes ver, cada conjunto de datos es una tupla en la que el primer elemento es el nombre de los datos y el segundo es otra tupla compuesta por puntos. Cada punto es una tupla de dos elementos, el prier es el valor x y el segundo el valor y.

No todos los gráficos usan toda la información de un conjunto de datos. Por ejemplo, el gráfico de sectores solo usa el primer punto de cada conjunto de datos y sólo utiliza el valor y de dicho punto.

Ahora puede que quieras especificar algunas opciones para que el gráfico pueda personalizarse cambiando sus valores predeterminados. Puedes ver los valores predeterminados mirando el método pycha.chart.Chart.__init__ method en el código fuente. Puedes usar diccionarios normales para definir tus opciones. Por ejemplo, imagina que quieres ocultar la leyenda y usar un color de fondo diferente:

   opciones = {
       'legend': {'hide': True},
       'background': {'color': '#f0f0f0'},
   }

Ahora estamos listos para instanciar el gráfico, añadir el conjunto de datos y pintarlo:

   import pycha.bar
   grafico = pycha.bar.VerticalBarChart(superficie, opciones)
   grafico.addDataset(conjuntoDeDatos)
   grafico.render()

Por ahora puedes elegir entre 4 tipos distintos de gráficos:

  • Gráficos de sectores (picha.pie.PieChart)
  • Gráficos de barras verticales (picha.bar.VerticalBarChart)
  • Gráficos de barras horizontales (picha.bar.HorizontalBarChart)
  • Gráficos de lineas (picha.bar.LineChart)

Finalmente puedes escribir la superficie resultante en un fichero gráfico o lo que tu quieras hacer con la librería Cairo:

   surface.write_to_png('output.png')

¡Eso es todo!. Puedes mirar más ejemplos en el directorio examples del código fuente.

Desarrollo

Puedes estar a la última y descargarte la versión de desarrollo de pycha obteniendo una copia de su repositorio subversion:

   svn co http://www.lorenzogil.com/svn/pycha/trunk pycha

Contacto

Hay una lista de correo sobre PyCha en http://groups.google.com/group/pycha Puedes registrarte para preguntar cosas sobre su uso or simplemente para hablar sobre su desarrollo. ¡Tus ideas y sugerencias son bienvenidas!

Referencia API

Cortesía de pydoc:

Nota: los documentos de la API se (re)generan cada hora.