Gráfico donut en matplotlib

Gráfico donut en matplotlib con pie

Matplotlib no tiene una función específica para gráficos donut: se crea con la función pie habitual y se reduce el ancho de las porciones con el argumento wedgeprops, lo que convierte el círculo en un anillo.

import matplotlib.pyplot as plt

# Datos
labels = ["G1", "G2", "G3", "G4", "G5"]
value = [12, 22, 16, 38, 12]

# Gráfico donut
fig, ax = plt.subplots()
ax.pie(value, labels = labels, wedgeprops = {"width": 0.4})

# plt.show()

Gráfico donut en matplotlib

Tamaño del agujero

La clave width de wedgeprops fija el ancho del anillo como una fracción del radio (que por defecto es 1), así que valores más pequeños generan un agujero más grande.

import matplotlib.pyplot as plt

# Datos
labels = ["G1", "G2", "G3", "G4", "G5"]
value = [12, 22, 16, 38, 12]

# Gráfico donut
fig, ax = plt.subplots()
ax.pie(value, labels = labels, wedgeprops = {"width": 0.2})

# plt.show()

Tamaño del agujero de un gráfico donut en matplotlib

Colores

Igual que en un gráfico de sectores normal, el color de relleno de cada porción se personaliza con el argumento colors.

import matplotlib.pyplot as plt

# Datos
labels = ["G1", "G2", "G3", "G4", "G5"]
value = [12, 22, 16, 38, 12]
colors = ["#B9DDF1", "#9FCAE6", "#73A4CA", "#497AA7", "#2E5B88"]

# Gráfico donut
fig, ax = plt.subplots()
ax.pie(value, labels = labels, colors = colors, wedgeprops = {"width": 0.4})

# plt.show()

Colores de un gráfico donut en matplotlib

Color del borde

Añade un borde entre porciones pasando también linewidth y edgecolor a wedgeprops.

import matplotlib.pyplot as plt

# Datos
labels = ["G1", "G2", "G3", "G4", "G5"]
value = [12, 22, 16, 38, 12]
colors = ["#B9DDF1", "#9FCAE6", "#73A4CA", "#497AA7", "#2E5B88"]

# Gráfico donut
fig, ax = plt.subplots()
ax.pie(value, labels = labels, colors = colors,
      wedgeprops = {"width": 0.4, "linewidth": 1, "edgecolor": "white"})

# plt.show()

Color del borde de un gráfico donut en matplotlib

Porcentajes

Igual que en un gráfico de sectores normal, pasa una cadena de formato a autopct para mostrar el porcentaje de cada porción, y pctdistance para controlar a qué distancia del borde se sitúa.

import matplotlib.pyplot as plt

# Datos
labels = ["G1", "G2", "G3", "G4", "G5"]
value = [12, 22, 16, 38, 12]

# Gráfico donut
fig, ax = plt.subplots()
ax.pie(value, labels = labels, wedgeprops = {"width": 0.4},
      autopct = '%1.1f%%', pctdistance = 0.8)

# plt.show()

Porcentajes en un gráfico donut en matplotlib

Texto en el centro

Un patrón habitual en los gráficos donut es mostrar un valor resumen en el hueco central, como el total. Como el agujero es simplemente espacio vacío, puedes colocar cualquier texto ahí con ax.text.

import matplotlib.pyplot as plt

# Datos
labels = ["G1", "G2", "G3", "G4", "G5"]
value = [12, 22, 16, 38, 12]

# Gráfico donut
fig, ax = plt.subplots()
ax.pie(value, labels = labels, wedgeprops = {"width": 0.4})
ax.text(0, 0, f"Total\n{sum(value)}", ha = "center", va = "center", fontsize = 14)

# plt.show()

Texto en el centro de un gráfico donut en matplotlib

Storytelling con Datos

Visualización de datos para profesionales

Comprar en Amazon

También te puede interesar