Gráfico radar en matplotlib

Datos de ejemplo

Considera los siguientes datos a modo de ejemplo:

# Datos
categories = ["Velocidad", "Potencia", "Autonomía", "Confort", "Precio"]
values = [4, 3, 5, 4, 2]

Gráfico radar en matplotlib

Un gráfico radar (o spider chart) compara varias variables numéricas en ejes dispuestos en círculo, por lo que necesita una proyección polar en lugar de la cartesiana habitual. Calcula un ángulo por categoría con numpy, repite el primer valor y ángulo al final para cerrar la forma, y dibuja con ax.plot.

import numpy as np
import matplotlib.pyplot as plt

angles = np.linspace(0, 2 * np.pi, len(categories), endpoint = False).tolist()
values_closed = values + values[:1]
angles_closed = angles + angles[:1]

fig, ax = plt.subplots(subplot_kw = dict(projection = "polar"))
ax.plot(angles_closed, values_closed)
ax.set_xticks(angles)
ax.set_xticklabels(categories)

# plt.show()

Gráfico radar en matplotlib

Relleno

Añade ax.fill justo después de ax.plot, usando los mismos ángulos y valores cerrados, para sombrear el área bajo la línea.

import numpy as np
import matplotlib.pyplot as plt

angles = np.linspace(0, 2 * np.pi, len(categories), endpoint = False).tolist()
values_closed = values + values[:1]
angles_closed = angles + angles[:1]

fig, ax = plt.subplots(subplot_kw = dict(projection = "polar"))
ax.plot(angles_closed, values_closed)
ax.fill(angles_closed, values_closed, alpha = 0.25)
ax.set_xticks(angles)
ax.set_xticklabels(categories)

# plt.show()

Gráfico radar relleno en matplotlib

Colores

Fija color tanto en plot como en fill para cambiar el color de la línea y del relleno.

import numpy as np
import matplotlib.pyplot as plt

angles = np.linspace(0, 2 * np.pi, len(categories), endpoint = False).tolist()
values_closed = values + values[:1]
angles_closed = angles + angles[:1]

fig, ax = plt.subplots(subplot_kw = dict(projection = "polar"))
ax.plot(angles_closed, values_closed, color = "#C44E52")
ax.fill(angles_closed, values_closed, color = "#C44E52", alpha = 0.25)
ax.set_xticks(angles)
ax.set_xticklabels(categories)

# plt.show()

Colores de un gráfico radar en matplotlib

Varios grupos

Para comparar más de un grupo, repite las llamadas a plot y fill para cada serie sobre los mismos ejes polares y añade una leyenda.

import numpy as np
import matplotlib.pyplot as plt

angles = np.linspace(0, 2 * np.pi, len(categories), endpoint = False).tolist()
angles_closed = angles + angles[:1]
values_a = values + values[:1]
values_b = [3, 4, 3, 5, 4] + [3]

fig, ax = plt.subplots(subplot_kw = dict(projection = "polar"))
ax.set_xticks(angles)
ax.set_xticklabels(categories)

ax.plot(angles_closed, values_a, label = "Modelo A")
ax.fill(angles_closed, values_a, alpha = 0.15)
ax.plot(angles_closed, values_b, label = "Modelo B")
ax.fill(angles_closed, values_b, alpha = 0.15)
ax.legend(loc = "upper right", bbox_to_anchor = (1.3, 1.1))

# plt.show()

Gráfico radar con varios grupos en matplotlib

Data Sketches

A journey of imagination, exploration, and beautiful data visualizations

Comprar en Amazon

También te puede interesar