Saltar al contenido

Hora del código #11

Hace unos días le hice un cambio al chat bot, ahora con cada precio envía una gráfica:

Gráfico en el chat bot de precios

Gráfico en el chat bot de precios

La gráfica se genera unos minutos luego de la carga de los datos en la herramienta pública, el horario no es el ideal pero yo no pongo las reglas.

Cuando estaba pensando la generación de la gráficas recordé, como Botman corre sobre PHP, que habían varias librerías para esa función como pChart, JpGraph , canvasJS y otras librerías más viejas y así. La cuestión es que los datos sólo cambian una vez al día entre semana y todas esas librerías son bastante pesadas para la generación de una simple gráfica lineal.

Recordé que Python tiene buen soporte para esas cosas así que la primera solución que encontré fue Matplotlib versión 3 y este ejemplo de Line Plot me sirvió de base.

Extraídas las fechas (eje X) y precios (eje Y) las agregué a la gráfica con:

ax.plot(f_datos, p_datos, 'r.-')

El tercer parámetro viene a significar que la línea va a ser color rojo (r = red), el marcador va a ser un punto (.) y la línea será solida (-). Hay más opciones.

Y lo siguiente me permitió agregar un texto arbitrario, el pie, a la gráfica:

pie = {'fontsize': 'small'}
plt.figtext(0.1,-0.2, u'Planeamiento / Ministerio de Agricultura, Ganadería y Alimentación - Guatemala. Fecha: ' + hoy , style='italic', **pie)

Para salvar la imagen usé savefig:

fig.savefig("grafico.jpg", bbox_inches = "tight", facecolor=fig.get_facecolor(), edgecolor='none', optimize=True, progressive=True, quality=85)

Al final de todo, sin contar el código para hacer las consultas a la base de datos, el código para generar cada gráfica (la gráfica en si, insertar el logo, el texto, la personalización) ocupa 41 líneas, supongo que se puede hacer más pequeño. Y la librería de Matplotlib no es muy grande, usando una de PHP esto hubiera quedado mucho más grande.