Tablas en matplotlib

A veces la mejor forma de mostrar unos datos es una tabla. matplotlib puede dibujar tablas con ax.table, lo que es útil para incluirlas en una figura junto a un gráfico o para exportarlas como imagen. Los ejemplos muestran la clasificación de una liga de fútbol.

Crear una tabla con ax.table

Pasa el contenido de las celdas a cellText y el encabezado a colLabels. Oculta los ejes con ax.axis("off") para mostrar solo la tabla.

import matplotlib.pyplot as plt

columns = ["Equipo", "Jugados", "Ganados", "Empatados", "Perdidos", "Puntos"]
rows = [["Rovers", 30, 21, 6, 3, 69],
        ["United", 30, 19, 7, 4, 64],
        ["Athletic", 30, 17, 8, 5, 59],
        ["City", 30, 15, 6, 9, 51],
        ["Wanderers", 30, 12, 9, 9, 45]]

fig, ax = plt.subplots()
ax.axis("off")
ax.table(cellText = rows, colLabels = columns, loc = "center")
# plt.show()

Tabla en matplotlib

Tamaño de fuente y de las celdas

Desactiva el tamaño de fuente automático con auto_set_font_size(False), establécelo con set_fontsize y agranda las celdas con scale(x, y).

import matplotlib.pyplot as plt

columns = ["Equipo", "Jugados", "Ganados", "Empatados", "Perdidos", "Puntos"]
rows = [["Rovers", 30, 21, 6, 3, 69],
        ["United", 30, 19, 7, 4, 64],
        ["Athletic", 30, 17, 8, 5, 59],
        ["City", 30, 15, 6, 9, 51],
        ["Wanderers", 30, 12, 9, 9, 45]]

fig, ax = plt.subplots()
ax.axis("off")
tab = ax.table(cellText = rows, colLabels = columns, loc = "center")

tab.auto_set_font_size(False)
tab.set_fontsize(11)
tab.scale(1.2, 1.8)
# plt.show()

Cambiar el tamaño de fuente y de las celdas de una tabla de matplotlib

Colores del encabezado y de las celdas

colColours establece el fondo del encabezado y cellColours el fondo de cada celda. Cada celda también se puede personalizar individualmente con tab[fila, columna], donde la fila 0 es el encabezado.

import matplotlib.pyplot as plt

columns = ["Equipo", "Jugados", "Ganados", "Empatados", "Perdidos", "Puntos"]
rows = [["Rovers", 30, 21, 6, 3, 69],
        ["United", 30, 19, 7, 4, 64],
        ["Athletic", 30, 17, 8, 5, 59],
        ["City", 30, 15, 6, 9, 51],
        ["Wanderers", 30, 12, 9, 9, 45]]

stripes = [["#F1FAEE"] * 6 if i % 2 == 0 else ["white"] * 6 for i in range(len(rows))]

fig, ax = plt.subplots()
ax.axis("off")
tab = ax.table(cellText = rows, colLabels = columns, loc = "center",
               cellColours = stripes, colColours = ["#1D3557"] * 6)
tab.auto_set_font_size(False)
tab.set_fontsize(10)
tab.scale(1.2, 2)

for col in range(len(columns)):
    tab[0, col].set_text_props(color = "white", weight = "bold")
# plt.show()

Tabla con encabezado de color y filas alternas en matplotlib

Destacar valores

Recorre las celdas para cambiar el color de las que cumplan una condición, por ejemplo el líder de la liga.

import matplotlib.pyplot as plt

columns = ["Equipo", "Jugados", "Ganados", "Empatados", "Perdidos", "Puntos"]
rows = [["Rovers", 30, 21, 6, 3, 69],
        ["United", 30, 19, 7, 4, 64],
        ["Athletic", 30, 17, 8, 5, 59],
        ["City", 30, 15, 6, 9, 51],
        ["Wanderers", 30, 12, 9, 9, 45]]

fig, ax = plt.subplots()
ax.axis("off")
tab = ax.table(cellText = rows, colLabels = columns, loc = "center")
tab.scale(1.1, 1.8)

for col in range(len(columns)):
    tab[1, col].set_facecolor("#FFD166")
# plt.show()

Destacar una fila de una tabla de matplotlib

Tabla debajo de un gráfico

Con loc = "bottom" la tabla se coloca debajo de los ejes, por lo que se pueden mostrar los valores de un gráfico bajo él. Ajusta el espacio con subplots_adjust.

import matplotlib.pyplot as plt

columns = ["Equipo", "Jugados", "Ganados", "Empatados", "Perdidos", "Puntos"]
rows = [["Rovers", 30, 21, 6, 3, 69],
        ["United", 30, 19, 7, 4, 64],
        ["Athletic", 30, 17, 8, 5, 59],
        ["City", 30, 15, 6, 9, 51],
        ["Wanderers", 30, 12, 9, 9, 45]]

teams = [r[0] for r in rows]
points = [r[5] for r in rows]

fig, ax = plt.subplots()
ax.bar(teams, points, color = "#457B9D")
ax.set_xticks([])
ax.table(cellText = [points], rowLabels = ["Puntos"], colLabels = teams, loc = "bottom")
plt.subplots_adjust(bottom = 0.2)
# plt.show()

Gráfico de barras con una tabla debajo en matplotlib

Si necesitas tablas con un formato más avanzado para informes o páginas web, echa un vistazo a la librería great_tables.

Storytelling con Datos

Visualización de datos para profesionales

Comprar en Amazon

También te puede interesar