Cómo obtener un gráfico de barras mediante una lista en Python

Déjame mostrarte el siguiente gráfico:

¿Te suena, verdad? A esto se le llama un gráfico de barras. Normalmente lo dibujamos utilizando distintas aplicaciones como Microsoft Excel o Microsoft Word.

Si queremos tener un mayor control del proceso de crear un gráfico de barras, crear dichos gráficos con programación es la mejor opción.

En este tutorial te mostraremos cómo poder crear gráficos de barras utilizando Python. ¿Estás preparado?

¿Qué módulos necesitamos?

Con el fin de llevar a cabo la tarea de elaborar un gráfico de barras, vamos a necesitar principalmente dos módulos: el módulo Image y el módulo ImageDraw, los cuales importaremos desde la Python Imaging Library (PIL). El módulo Image se utiliza para cargar una imagen, mientras que el módulo ImageDraw se utiliza para crear gráficos 2D (es decir, dibujar una línea).

Y ya que he mencionado PIL, deja que te enseñe cómo podemos instalarlo. Bueno, en realidad no instalaremos PIL, instalaremos Pillow. La razón de ello es que la versión más reciente de PIL, PIL 1.1.7, fue lanzado en 2009 y sólo es compatible con Python 1.5.2-2.7. No tiene soporte para Python 3.x, y me temo que su desarrollo se ha abandonado.

Aquí es donde entra en acción Pillow, puesto que sí tiene soporte para Python 3.x. Así que, en este tutorial, vamos a utilizar Pillow por el bien de todos los que utilicéis Python 3.X. Y no os preocupéis, utilizar Pillow no te va a dar ningún problema si estás utilizando versiones anteriores de Python.

Instalación de Pillow

Los pasos mencionados en esta sección sobre la instalación de Pillow son para usuarios de Mac OS X, ya que estoy escribiendo actualmente este tutorial en un sistema Mac OS X El Capitan.

Una manera fácil de instalar Pillow en tu Mac es a través de pip. Puedes instalarlo escribiendo el siguiente comando en tu terminal:

$ sudo easy_install pip

En este punto, Pillow puede ser instalado escribiendo:

$ sudo pip install pillow

Desarrollando el programa

Ahora vamos a ver los distintos bloques en el desarrollo del programa paso a paso. La primero que necesitamos es una imagen en blanco en la que basaremos nuestro gráfico de barras. Puedes descargar la imagen en blanco aquí.

Ahora vamos a leer esta imagen en blanco y a dibujarla. Podemos hacer esto de la siguiente manera:

from PIL import Image, ImageDraw
img = Image.open('blank.png')
draw_img = ImageDraw.Draw(img)

Dado que queremos dibujar un gráfico de barras, necesitamos ciertos datos. Para ello, podemos utilizar listas. Por lo tanto, nuestros datos (lista) podrían ser tal que así:

data = ['4','5','87','1','44','83','93','2','54','84','100','64']

En este punto, lo que tenemos que hacer es dibujar el gráfico de barras. Trataremos a las barras que vemos en la gráfica como líneas. Así que vamos a hacer uso del método line() del módulo ImageDraw.

A continuación te muestro el código para realizar la tarea de elaborar un gráfico de barras. Después lo explicaré, no te preocupes:

for i in data:
    x = x + 30 
    y = 200 - int(i) 
    draw_img.line((x,200,x,y), width=10, fill=(255,0,0,255))

Como puedes ver, el bucle recorre la lista y dibuja un gráfico de barras utilizando los datos de la lista. x = x + 30 nos proporciona el espacio necesario entre cada punto de datos de la lista en el eje x. Antes de continuar, quiero recordarte que el punto (0,0) en la imagen es el punto de la parte superior izquierda del eje. Por lo que sería como dibujar las líneas al revés a lo que estamos acostumbrados al marcar las coordenadas del punto en un gráfico.

Si saltamos a la última línea del anterior script, podemos leer esta parte draw_img.line ((x, 200, x, y) tal que así: traza una línea desde el punto (x, 200) hasta el punto (x, y). Por lo tanto, si comenzamos con el primer punto de datos 4, la línea se dibuja a partir de (34.200) a (34.196). Así que, cuando muestro la salida por un tiempo, el eje x aparecerá como normalmente estamos acostumbrados (a partir de la parte inferior izquierda para el punto (0,0)). El truco consiste en utilizar y = 200. Como verás, nosotros siempre hemos dibujado una línea donde y = 200 para todos los puntos de datos, y esto nos dará una impresión de como se están dibujando los puntos en el gráfico durante la visualización del resultado.

El width representa el ancho (grosor) de la línea, y fill = (255,0,0,255) representa el color de la línea. Es decir, el color RGBA.

Por último, podemos ver la imagen mediante el comando: img.show ().

Poniéndolo todo junto

Ahora que hemos cubierto los componentes básicos de nuestro programa, vamos a ponerlo todo junto y ver cómo se ve nuestro script:

from PIL import Image, ImageDraw
img = Image.open('blank.png')
draw_img = ImageDraw.Draw(img)
 
data = ['4','5','87','1','44','83','93','2','54','84','100','64'] 
x = 0
 
for i in data:
    x = x + 30 
    y = 200 - int(i) 
    draw_img.line((x,200,x,y), width=10, fill=(255,0,0,255))
         
img.show()

Salida

Ahora viene la parte interesante, el resultado del script anterior. Si ejecutas el programa, obtendrás algo similar a esto:

Fuente: Abder-Rahman Ali

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP