Considera los siguientes datos de muestra para este tutorial, donde cada día entre el 01-01-2020 y el 30-06-2023 viene representado por un único valor.
import numpy as np; np.random.seed(1)
import pandas as pd
# Secuencia de fechas
dias = pd.date_range('01/01/2020', periods = 1277, freq = 'D')
# Serie temporal de pandas con dato aleatorios para cada día
valores = pd.Series(np.random.randn(len(dias)), index = dias)
calplot
En Python la librería calplot
permite crear calendarios en los que cada día se colorea en base a su correspondiente valor, creando así mapas de calor. Esta librería nace a partir de la librería calmap
, la cual ya no tiene mantenimiento activo, proporcionando además una personalización más sencilla y nuevas características.
Para crear el calendario tan solo necesitas pasar tu serie de pandas con datos para cada día a la función calplot
y se dibujarán tantos años como haya en tus datos. Ten en cuenta que el argumento suptitle
se puede utilizar para agreagar un título a la figura y además se puede personalizar pasando un diccionario a suptitle_kws
.
import calplot
import matplotlib.pyplot as plt
calplot.calplot(valores,
suptitle = 'Calendario',
suptitle_kws = {'x': 0.5, 'y': 1.0})
# plt.show()
Años en orden descendente
Por defecto, los años se presentan en orden ascendente, pero puedes invertir el orden con yearascending = False
.
import calplot
import matplotlib.pyplot as plt
calplot.calplot(valores, yearascending = False,
suptitle = 'Calendario con años en orden descendente',
suptitle_kws = {'x': 0.5, 'y': 1.0})
# plt.show()
Crear un calendario de solo un año
Si quieres especificar un único año puedes usar la función yearplot
y pasar el año al argumento year
. Sin embargo, recomendamos utilizar la función calplot
y filtrar tus datos, ya que calplot
es un wrapper de yearplot
y el gráfico final es más personalizable.
import calplot
import matplotlib.pyplot as plt
# Con calplot (recomendado):
calplot.calplot(valores.loc['2021'])
# Con yearplot:
calplot.yearplot(valores, year = 2021)
# plt.show()
Eliminar la leyenda
Ten en cuenta que si quieres puedes eliminar la leyenda estableciendo colorbar = False
.
import calplot
import matplotlib.pyplot as plt
calplot.calplot(valores, colorbar = False)
# plt.show()
La paleta de colores por defecto del mapa de calor ('viridis'
) se puede personalizar con el argumento cmap
. En los siguientes ejemplos de esta sección utilizaremos la paleta de colores llamada 'Spectral_r'
.
import calplot
import matplotlib.pyplot as plt
calplot.calplot(valores, cmap = 'Spectral_r')
# plt.show()
Color de los datos faltantes
Si tus datos contienen datos faltantes se colorearán en gris claro con los ajustes predefinidos. Sin embargo, puedes personalizar el color usando el argumento fillcolor
.
import calplot
import matplotlib.pyplot as plt
calplot.calplot(valores, fillcolor = 'orange', cmap = 'Spectral_r')
# plt.show()
Color de las líneas que dividen los meses
Las líneas que dividen cada mes son grises por defecto, pero puedes personalizar su color con el argumento edgecolor
, tal y como se muestra en el ejemplo siguiente.
import calplot
import matplotlib.pyplot as plt
calplot.calplot(valores, edgecolor = 'black', cmap = 'Spectral_r')
# plt.show()
Color de las líneas que dividen los días
El color de las líneas que dividen cada día se puede establecer a través del argumento linecolor
. Además, el argumento linewidth
, que por defecto es 1, permite personalizar el grosor de dichas líneas.
import calplot
import matplotlib.pyplot as plt
calplot.calplot(valores, linecolor = 'green', linewidth = 1,
cmap = 'Spectral_r')
# plt.show()
Etiquetas de los días
Las etiquetas por defecto de los días son los nombres abreviados de los días de la semana en inglés. Puedes personalizar estas etiquetas pasando una lista al argumento daylabels
de la función. Además, también puedes eliminar algunas etiquetas de los días con dayticks
, pasando una lista de enteros especificando qué días etiquetar.
import calplot
import matplotlib.pyplot as plt
calplot.calplot(valores, cmap = 'RdBu',
daylabels = ['Lunes', 'Martes', 'Miércoles',
'Jueves', 'Viernes', 'Sábado', 'Domingo'])
# plt.show()
Etiquetas de los meses
De manera análoga a los nombres de los días, también puedes personalizar las etiquetas de los meses, pero en este caso con los argumentos monthlabels
y monthticks
de la función calplot
.
import calplot
import matplotlib.pyplot as plt
calplot.calplot(valores, cmap = 'RdBu',
monthlabels = ['Enero', 'Febrero', 'Marzo',
'Abril', 'Mayo', 'Junio',
'Julio', 'Agosto', 'Septiembre',
'Octubre', 'Noviembre', 'Diciembre'])
# plt.show()
Etiquetas de los años
Las etiquetas que aparecen a la izquierda mostrando los años se pueden eliminar con yearlabels = False
. A su vez, también puedes personalizar su tamaño, color u otras propiedades de los textos pasando un diccionario a yearlabel_kws
.
import calplot
import matplotlib.pyplot as plt
calplot.calplot(valores, cmap = 'RdBu',
yearlabels = True,
yearlabel_kws = {'fontsize': 15, 'color': 'red'})
# plt.show()
Etiquetas de las celdas
Por último, ten en cuenta que también puedes agregar los valores correspondientes a cada día especificando un formato con textformat
. Recuerda es posible especificar un texto para las celdas que no tienen datos, así como cambiar el color de los textos con textcolor
.
import calplot
import matplotlib.pyplot as plt
calplot.calplot(valores, cmap = 'RdBu',
textformat = '{:.0f}', textfiller = '-', textcolor = 'black')
# plt.show()
También te puede interesar