Gráficos de línea con MatplotLib

Publicado por Andrea Navarro en

En este artículo veremos como crear y personalizar un gráfico de línea utilizando la librería de Python Matplotlib.

Para crear un gráfico de línea es necesario una lista de valores enteros o flotantes que representarán los valores del eje y del gráfico. Una vez creados la figura y los ejes se genera el gráfico utilizando el método plot y pasando la lista de valores como argumento.

import matplotlib.pyplot as plt

valoresY = [50,25,30,29,40,45]
fig, ax = plt.subplots()
ax.plot(valoresY)
plt.show()

Si no son especificados, los valores del eje X se colocarán automáticamente como la posición de cada valor en la lista pasada. Los valores del eje Y se colocarán por defecto para abarca todo el rango de los valores existentes.

Definir valores del eje X

Para definir los valores correspondientes al eje X se los pasa en forma de lista como el primer argumento del método plot. Cada elemento de la lista X se corresponderá con el valor de la misma posición de la lista Y. Es importante por lo tanto que ambas listas tengan las misma longitud.

import matplotlib.pyplot as plt

valoresY = [50,25,30,29,40,45]
valoresX = [10,20,30,40,50,60]
fig, ax = plt.subplots()
plt.plot(valoresX, valoresY)
plt.show()

La línea será dibujada siguiendo el orden del eje X por lo que a menos que se busque un retroceso en la línea es importante que los valores se encuentren ordenados.

Marcadores

Además de la línea generada por el gráfico puede también utilizarse los marcadores. Los marcadores indicarán aquellos puntos del gráfico que correspondan a los valores de los datos pasados. El tipo de marcador puede definirse como un caracter pasado como el tercer argumento del método plot. Si no se especifica además un tipo de línea el gráfico consistirá solamente en los marcadores.

import matplotlib.pyplot as plt

valoresY = [50,25,30,29,40,45]
valoresX = [10,20,30,40,50,60]
fig, ax = plt.subplots()
plt.plot(valoresX, valoresY, "o")
plt.show()

Existen diferentes caracteres que darán como resultado diferentes formas de marcadores. A continuación se listas algunas de las más comunes, una lista completa puede encontrarse en la documentación de MatplotLib.

.Punto
oCírculo
sCuadrado
<Triángulo
DDiamante
*Estrella
,Pixel
hHexágono
pPentágono

El tamaño del marcador puede modificarse utilizando el argumento markersize. Dependiendo de la ubicación y cantidad de valores es posible que los marcadores se solapen haciendo que el gráfico se vuelva difícil de leer.

import matplotlib.pyplot as plt

valoresY = [50,25,30,29,40,45]
valoresX = [10,20,30,40,50,60]
fig, ax = plt.subplots()
plt.plot(valoresX, valoresY, "o",markersize=15 )
plt.show()

Tipo de línea

Por defecto el gráfico de línea será dibujado utilizando una línea solida. Esto puede modificarse especificando un tipo de línea como tercer argumento de el método plot. Este argumento puede utilizarse simultáneamente para configurar el tipo de línea y el marcador del gráfico.

import matplotlib.pyplot as plt

valoresY = [50,25,30,29,40,45]
valoresX = [10,20,30,40,50,60]
fig, ax = plt.subplots()
plt.plot(valoresX, valoresY, "--")
plt.show()

A continuación se listan los tipos de líneas permitidos para el gráfico de línea:

Línea sólida
Línea discontinua
:Línea de puntos
-.Línea de puntos y rayas

El grosor de la línea seleccionada puede modificarse con el argumento linewidth configurando el valor deseado.

import matplotlib.pyplot as plt

valoresY = [50,25,30,29,40,45]
valoresX = [10,20,30,40,50,60]
fig, ax = plt.subplots()
plt.plot(valoresX, valoresY, "--", linewidth=8)
plt.show()

Color

Existen dos métodos diferentes para especificar el color del gráfico. El primero, y la más sencillo, es hacer uso el argumento previamente utilizado para especificar marcadores y tipos de línea, y pasar uno de los caracteres que representa un color.

En el siguiente ejemplo se especifica que el gráfico de línea tendrá marcadores en forma de diamante D, una línea continua -, y color magenta m.

import matplotlib.pyplot as plt

valoresY = [50,25,30,29,40,45]
valoresX = [10,20,30,40,50,60]
fig, ax = plt.subplots()
plt.plot(valoresX, valoresY, "D-m")
plt.show()

Los nombres de colores abreviados son muy prácticos a la hora de configurar un gráfico con unas pocas líneas aunque no existe una gran variedad de opciones. A continuación se lista los colores abreviados soportados por MatplotLib.

bAzul
gVerde
rRojo
cCian
mMagenta
yAmarrilo
kNegro

Matplotlib reconoce una gran variedad de formatos de colores incluyendo RGB, RGBA, Hexadecimal, colores por nombre, etc. Para utilizar cualquiera de estos formatos se utiliza el argumento color.

import matplotlib.pyplot as plt

valoresY = [50,25,30,29,40,45]
valoresX = [10,20,30,40,50,60]
fig, ax = plt.subplots()
plt.plot(valoresX, valoresY, "D-" , color="#4f4009")
plt.show()

De esta manera es posible trabajar con un rango más amplio de colores e incluso utilizar transparencias en la creación del gráfico.

Líneas múltiples

Es posible graficar más de una serie de datos en un mismo gráfico de líneas. Para hacerlo es necesario llamar al método plot por cada serie de datos. Para mayor legibilidad del gráfico cada línea debería diferenciarse en color, tipo de línea o marcador.

import matplotlib.pyplot as plt

valoresAY = [50,25,30,29,40,45]
valoresBY = [45,20,52,10,38,40]
valoresX = [10,20,30,40,50,60]
fig, ax = plt.subplots()
plt.plot(valoresX, valoresAY, "o--g" )
plt.plot(valoresX, valoresBY, "s:b" )
plt.show()

Leyenda

Es posible crear un cuadro de leyendas dentro de el gráfico para facilitar la comprensión de los datos explicando que valores representa cada línea dentro del mismo. Para crear el cuadro de leyenda se utiliza el método legend al que se le pasa una lista de los nombres que se mostrarán para cada línea. Estos nombres serán asignados de acuerdo al orden en el que se han creado las líneas.

import matplotlib.pyplot as plt

valoresAY = [50,25,30,29,40,45]
valoresBY = [45,20,52,10,38,40]
valoresX = [10,20,30,40,50,60]
fig, ax = plt.subplots()
plt.plot(valoresX, valoresAY, "o--g" )
plt.plot(valoresX, valoresBY, "s:b" )
plt.legend(["Valores A", "Valores B"])
plt.show()

La legenda se colocará por defecto en una sección del gráfico donde no se superponga con ninguna línea. Puede observarse en la imagen donde el nombre asociado con cada línea puede verse a continuación de una representación donde se muestra el color, tipo de línea y marcador de la línea.

Límites de los ejes

Por defecto los valores mostrados en los ejes X e Y se realizan de manera automática para mostrar todos los datos existentes. Es posible modificar ese valor para que el gráfico incluya rangos donde no hay valores o acotarlos de manera que solo parte de los valores ingresados puedan observarse.

Para especificar el límite del eje X se utiliza el método xlim al que se le pasa por argumento los valores de inicio y fin. De manera idéntica se puede configurar el rango del eje Y con ylim.

import matplotlib.pyplot as plt

valoresAY = [50,25,30,29,40,45]
valoresBY = [45,20,52,10,38,40]
valoresX = [10,20,30,40,50,60]
fig, ax = plt.subplots()
plt.plot(valoresX, valoresAY, "o--g" )
plt.plot(valoresX, valoresBY, "s:b" )
plt.legend(["Valores A", "Valores B"])
plt.xlim(0, 70)
plt.ylim(20, 50)
plt.show()

Etiquetas

Para facilitar la lectura del gráfico es posible crear etiquetas para los ejes X e Y utilizando los métodos xlabel e ylabel respectivamente. Finalmente puede etiquetarse el gráfico con el método title.

import matplotlib.pyplot as plt

valoresAY = [50,25,30,29,40,45]
valoresBY = [45,20,52,10,38,40]
valoresX = [10,20,30,40,50,60]
fig, ax = plt.subplots()
plt.plot(valoresX, valoresAY, "o--g" )
plt.plot(valoresX, valoresBY, "s:b" )
plt.legend(["Valores A", "Valores B"])
plt.xlim(0, 70)
plt.ylim(20, 50)
plt.title("Título del gráfico")
plt.xlabel("Etiqueta X")
plt.ylabel("Etiqueta Y")
plt.show()

Grilla

La grilla permite identificar el valor correspondiente a un punto del gráfico de línea con más facilidad. Esto es especialmente útil cuando los valores se encuentran lejos de un eje o cuando se quieren comparar valores. Para mostrar la grilla se utiliza el método grid configurado a True.

import matplotlib.pyplot as plt

valoresAY = [50,25,30,29,40,45]
valoresBY = [45,20,52,10,38,40]
valoresX = [10,20,30,40,50,60]
fig, ax = plt.subplots()
plt.plot(valoresX, valoresAY, "o--g" )
plt.plot(valoresX, valoresBY, "s:b" )
plt.legend(["Valores A", "Valores B"])
plt.title("Título del gráfico")
plt.xlabel("Etiqueta X")
plt.ylabel("Etiqueta Y")
plt.grid(True)
plt.show()

En este artículo hemos visto como crear un gráfico de línea con MatplotLib y como configurar su estilo. También hemos visto diferentes técnicas para mejorar la legibilidad de los datos. Espero que les sirva!


¿Preguntas? ¿Comentarios?

Si tenés dudas, o querés dejarnos tus comentarios y consultas, sumate al grupo de Telegram de la comunidad JuncoTIC!
¡Te esperamos!

Categorías: Programación

Andrea Navarro

- Ingeniera en Informática - Docente universitaria - Investigadora