Python

Agregar líneas a las figuras de Matplotlib

Incluir una o varias líneas en una gráfica puede ser una herramienta sencilla, pero muy útil, para señalar al lector algunos valores que pueden ser de interés. Tales como los cambios de tendencia de una serie. Por eso en la mayoría de las librerías gráficas existen funciones para ello. Veamos algunas de las funciones disponibles para agregar líneas a las figuras de Matplotlib.

Incluir líneas verticales en Matplotlib

Para representar una serie de datos en Matplotlib se puede emplear la función plot(), pasándole cómo parámetros los valores tanto de x como de y. Por ejemplo, tal como se hace en el siguiente código.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7]
y = [4, 3, 2, 5, 3, 6, 5]

plt.plot(x, y, label="Valores")
plt.xlabel("Tiempo")
plt.ylabel("Valores")
plt.legend()
plt.show()

El cual produce como resultado la siguiente figura.

Gráfico con una serie básica

Ahora, en el caso de que se le desee indicar al usuario un rango de valores para que se fije en él se puede recurrir a unas líneas verticales. Lo que en Matplotlib se puede conseguir con la función axvline(). El único parámetro que necesita esta función es la pasión en la que se desee dibujar (x). Aunque también es posible indicar otras opciones cómo puede ser el color (color) o una etiqueta para la línea (label).

Siguiendo con el ejemplo anterior se le puede iniciar al usuario que se fije en los valores del rango que va de 3 a 6 mediante un par de líneas. Facilitando al lector que identifique de una forma rápida estos valores. Así se puede crear una línea verde para indicar el inicio de los valores, la cual también se puede etiquetar con la palabra “Min”, y otra línea roja para señalar el final de la serie, a la que se puede agregar la etiqueta “Max”. Esto es exactamente lo que se hace en el siguiente código mediante el uso de la función axvline().

plt.plot(x, y, label="Valores")
plt.axvline(x=3, color="g", label="Min")
plt.axvline(x=6, color="r", label="Max")
plt.xlabel("Tiempo")
plt.ylabel("Valores")
plt.legend()
plt.show()

Produciendo la siguiente figura cuando se ejecuta.

Serie creada en Matplotlib a la que se le han agregado dos líneas verticales

Incluir líneas solamente hasta una altura

En una figura puede que no se quiera incluir una línea que ocupe toda la gráfica. Para solucionar esto la función axvline() cuenta con dos parámetros opcionales ymin e ymax, indicando mediante el primero el valor donde comienza la línea y el segundo el valor donde termina. Aunque calcular la posición correcta puede ser un poco complicado, ya que se debe indicar la fracción de la figura dónde debe comenzar y terminar la línea, no los valores del eje y. Lo que se puede ver en el siguiente ejemplo donde se dibuja la línea hasta el valor de los datos.

plt.plot(x, y, label="Valores")
plt.axis([1, 7, 1, 7])
plt.axvline(x=3, ymax=1/6, color="g", label = "Min")
plt.axvline(x=6, ymax=5/6, color="r", label = "Max")
plt.xlabel("Tiempo")
plt.ylabel("Valores")
plt.legend()
plt.show()

Con lo que se obtiene la siguiente figura.

Serie creada en Matplotlib a la que se le han agregado dos líneas verticales limitadas en altura

Nótese que para indicar 2 en la primera línea se ha usado 1/5, mientras que para el valor 6 se ha empleado 5/6. El proceso para obtener estos valores es sencillo. Lo primero en lo que debemos fijarnos es que el eje y se ha fijado entre 1 y 7, por lo que la altura total son 6. Por otro lado como comienza en 1, el primer punto sería la altura de este menos el origen, esto es (2 – 1)/(7 – 1) = 1/6. Mientras que el segundo caso sería el cálculo siguiente (6 – 1)/(7 – 1) = 5/6.

Incluir líneas horizontales en Matplotlib

Para dibujar líneas horizontales existe una función análoga a la anterior que se llama axhline(). Siendo necesario en este caso indicar la altura del eje y en el que se desea dibujar la línea. El resto de los parámetros funciona igual salvo que para indicar la posición de inicio y fin de la línea los parámetros son xmin y xmax, algo obvio ya que ahora se acota en el eje x. Por ejemplo, se puede pintar una línea verde para identificar el punto mínimo y otra roja para el máximo como se muestra en el siguiente ejemplo.

plt.plot(x, y, label="Valores")
plt.axis([1, 7, 1, 7])
plt.axvline(x=3, ymax=1/6, color="g", label="Min")
plt.axvline(x=6, ymax=5/6, color="r", label="Max")
plt.axhline(y=2, xmax=2/6, color="g")
plt.axhline(y=6, xmin=5/6, color="r")
plt.xlabel("Tiempo")
plt.ylabel("Valores")
plt.legend()
plt.show()

Código que produce la siguiente figura.

Serie creada en Matplotlib a la que se le han agregado dos líneas verticales y horizontales

Conclusiones

En esta ocasión se ha visto una forma para agregar líneas a las figuras de Matplotlib mediante el uso de las funciones axhline() y axvline(). Las cuales son bastante fáciles de usar y pueden ser de ayuda para facilitar al lector identificar la posición de valores o rangos de valores concretos a los que debería prestar atención.

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: Matplotlib

Recent Posts

Curiosidad: ¿Por qué se llama “regresión” lineal?

Un nombre que suena a retroceso… pero que usamos para predecir el futuro: la regresión…

3 horas ago

Guía definitiva para trabajar con JSON en SQL Server

El formato JSON (JavaScript Object Notation) se ha convertido en el estándar de facto para…

2 días ago

Cómo crear un Data Lake en Azure paso a paso

El volumen de datos que las organizaciones generan y deben manejar crece día a día:…

1 semana ago

¿Por qué el azar no es tan aleatorio como parece?

Cuando escuchamos la palabra “azar”, pensamos en lo impredecible: una moneda que gira en el…

1 semana ago

Detectan vulnerabilidad crítica en MLflow que permite ejecución remota de código

Una nueva vulnerabilidad crítica ha sido detectada en MLflow, la popular plataforma de código abierto…

1 semana ago

Curiosidad: ¿Por qué los datos “raros” son tan valiosos?

En estadística, los valores atípicos —también llamados outliers— son esos datos que se alejan “demasiado”…

2 semanas ago

This website uses cookies.