Python

Generar líneas y áreas arbitrarias en Matplotlib

Al crear una gráfica con Matplotlib puede surgir la necesidad de dibujar líneas o áreas arbitrarias para realizar anotaciones. Aunque no es una herramienta de dibujo, esta no es una tarea complicada. Veamos en este tutorial los pasos para poder incluir líneas y áreas arbitrarias en Matplotlib.

Creación de una línea

Una opción para dibujar líneas en las figuras de Matplotlib es plot(). Para ello, solamente habrá que pasarle como parámetros las coordenadas iniciales y finales de la recta que se desea dibujar, uniendo ambas mediante una línea sólida. Siendo el primer parámetro una lista con las posiciones en el eje x y el segundo otra lista con las posiciones en eje y. Esto es, la forma básica cómo se deben llamar a esta función es la siguiente

plot([x1, x2], [y1, y2]).

Así, si se desea dibujar una recta entre el punto (1, 5) y (2, 6) solamente se debería escribir un código como el siguiente.

import matplotlib.pyplot as plt 

plt.plot([1, 2], [5, 6], color='green')
plt.show()

Lo que produce como resultado la siguiente figura, donde se puede apreciar una línea verde entre los puntos indicados.

Línea dibujada con Matplotlib

Combinación de varias líneas

En el caso de que se desee dibujar más de una línea solamente se debe llamar a la función plot() tantas veces como sea necesario. Así, al igual que el resto de objetos, estos se dibujarán cuando se llame a la función show(). Por ejemplo, si se desea crear un triángulo que una las coordenadas (1, 5), (2, 6) y (3, 3) solamente se debe ejecutar el siguiente pedazo de código.

plt.plot([1, 2], [5, 6], color='green')
plt.plot([2, 3], [6, 3], color='blue')
plt.plot([3, 1], [3, 5], color='red')
plt.show()

Con lo que se obtiene la siguiente figura.

Tres líneas formando un triángulo creado con Matplotlib

Nótese que en este caso se ha usado un color diferente para cada una de las líneas, pero sí solamente se desea una un color esta figura se puede crear en una única llamada a la función plot().

plt.plot([1, 2, 3, 1], [5, 6, 3, 5], color='red')
plt.show()

Obteniendo ahora como resultado la siguiente gráfica.

Triángulo creado con Matplotlib

Creación de un área entre las líneas

Finalmente, si se desea rellenar el área dentro de la figura se puede recurrir a la función fill_between(), la cual tiene la siguiente forma básica

fill_between(x, y1, y2=0, …)

Los únicos parámetros de la función obligatorios son los dos primeros. Mediante el primer parámetro, x, se deben indicar las coordenadas del eje x, mientras que con el segundo se indican las coordenadas de la curva en el eje y. El tercer parámetro, y2, es opcional, permite indicar las coordenadas de una segunda curva con la que se cierra el área. En el caso de que se omita el área se cerrará en el eje de abscisas.

Por ejemplo, para dibujar el triángulo de la gráfica anterior se deben tomar los puntos de eje x donde comienzan y finalizan las líneas, esto es (1, 2, 3). Ahora y1 serían los valores de que toma la curva en estos puntos es (5, 6, 3). Con lo que se puede ejecutar el siguiente código

plt.plot([1, 2, 3, 1], [5, 6, 3, 5], color='red')
plt.fill_between([1, 2, 3], [5, 6, 3], color='gray')
plt.show()

Para obtener la siguiente figura

Área debajo de un triángulo dibujado con Matplotlib

Al no haber indicado los valores de y2 el área llega hasta el eje x, pero esto no es lo que se desea para esta figura. Hay que conocer los valores de la segunda curva para las posiciones (1, 2, 3). Los más fáciles son el primero y el último, siendo los mismos que en la curva superior, 5 y 3 respectivamente. El punto medio será el punto intermedio entre 5 y 3, esto es, 4. Así el con el siguiente código se crea un área dentro del triángulo.

plt.plot([1, 2, 3, 1], [5, 6, 3, 5], color='red')
plt.fill_between([1, 2, 3], [5, 6, 3], [5, 4, 3], color='gray')
plt.show()

Lo que produce la siguiente figura

Área de un triángulo dibujado con Matplotlib

Creación de áreas más complejas

Las áreas que se dibujar con la función fill_between() no tienen por qué ser solamente rectas, las áreas pueden ser tan complejas como las que se crean con la función plot(). Así, se puede dibujar un área en base a un seno con el siguiente empleo

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, np.pi, 100)
y = np.sin(np.pi * x / 2)

plt.plot(x, y, color='red')
plt.fill_between(x, y, color='gray')
plt.show()

Obteniendo como resultado la siguiente figura.

Área de una función seno dibujada con Matplotlib

Conclusiones

En esta ocasión se ha visto cómo dibujar líneas y áreas arbitrarias en Matplotlib. Unos métodos que pueden ser de gran utilidad para incluir anotaciones en las gráficas.

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: Matplotlib

Recent Posts

La Paradoja del Cumpleaños, o por qué no es tan raro compartir fecha de nacimiento

Imagínate en una sala con un grupo de personas, por ejemplo, en una oficina, un…

3 días ago

Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)

En el trabajo diario con ordenadores, es común encontrarse con tareas repetitivas: realizar copias de…

5 días ago

Curiosidad: ¿Por qué usamos p < 0.05? Un umbral que cambió la historia de la ciencia

En casi cualquier análisis estadístico —ya sea en medicina, psicología, economía o ciencia de datos—…

1 semana ago

¿Está concentrado el MSCI World? Un análisis con Gini, Lorenz y leyes de potencia

El MSCI World Index suele presentarse como “la ventana al mundo” para quienes invierten en…

2 semanas ago

Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo

En el mundo del análisis de datos solemos escuchar una idea poderosa: cuantos más datos,…

2 semanas ago

Error npm ERR! code EACCES al instalar paquetes en Node.js: Cómo solucionarlo paso a paso

¿Te has encontrado con este error al intentar instalar paquetes con npm? npm ERR! code…

3 semanas ago

This website uses cookies.