Revista Informática

Introducción a las gráficas de tarta en Matplotlib

Publicado el 30 septiembre 2024 por Daniel Rodríguez @analyticslane
Introducción a las gráficas de tarta en Matplotlib

Junto a las gráficas de barras, una de las mejores opciones para visualizar datos categóricos son las gráficas de tarta. Mediante las cuales se puede mostrar el peso que tienen cada una de las categorías en el total de los datos. En esta entrada se explicarán las bases para la creación de gráficas de tarta en Matplotlib y algunas de las opciones más interesantes.

Creación de una gráfica de tarta básica con Matplotlib

Para crear una gráfica de tarta es necesario contar con un conjunto de datos categóricos, por ejemplo, las ventas en función a alguna categoría. Con los datos solamente se debe importar Pyplot de Matplotlib y pasar los datos a la función plt.pie():

import matplotlib.pyplot as plt

# Datos para la gráfica
labels = ['Ventas A', 'Ventas B', 'Ventas C', 'Ventas D']
sizes = [25, 40, 20, 20]

# Crear gráfica de tarta básica
plt.pie(sizes, labels=labels)
plt.title("Gráfica de Tarta Básica")
plt.show()

Este código genera una gráfica de tarta básica con las etiquetas correspondientes. Para lo que se le han pasado dos parámetros a la función:

  • sizes: una lista o array que contiene los tamaños de cada porción en la tarta. Los valores son proporcionales entre sí, por lo que no es necesario normalizarlos para usarlos (no tiene que sumar 100 ni ninguna cantidad específica, la función se encarga de calcular las proporciones).
  • labels: parámetro opcional con el que se indica los nombres de cada categoría. Las etiquetas aparecerán alrededor de las porciones para identificarlas. Si el parámetro no se indica no se mostrará ninguna etiqueta en la gráfica.

Añadir valores y porcentajes a la gráfica

La gráfica da una información visual de las relaciones entre las diferentes categorías. Pero, en algunos casos, puede ser necesario incluir los valores numéricos exactos. Para esto se puede usar la propiedad autopct para calcular y mostrar los porcentajes en de cada una de las categorías. Esto es lo que se hace en el siguiente ejemplo:

plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.title("Gráfica de Tarta con Porcentajes")
plt.show()

El parámetro autopct permite agregar los porcentajes, y el formato '%1.1f%%' muestra los valores con un decimal.

Si lo que se desea es mostrar los datos en lugar del porcentaje es necesario pasar una función lambda al parámetro autopct en lugar del formato. Esto permite escribir cualquier valor en la gráfica. Por ejemplo, en la siguiente gráfica se puede ver como mostrar el valor de la categoría con el símbolo del Euro.

# Función personalizada para mostrar valores
def func(valor):
    return f'{valor:.0f}'  # Valor sin decimales

# Crear gráfica de tarta mostrando los valores
plt.pie(sizes, labels=labels, autopct=lambda p: func(p * sum(sizes) / 100))
plt.title("Gráfica de Tarta con Valores Numéricos")
plt.show()

La función personalizada func(valor) convierte en texto el valor numérico, debido a que pie() pasa como valor el porcentaje es necesario recuperar el dato original. Para lo que se suma los valores y se multiplican por el valor dividido por 100.

Cambiar los colores de las porciones

Matplotlib permite personalizar los colores usando el parámetro colors al que se le debe especificar una lista de colores para las porciones:

colors = ['#ff9999', '#66b3ff', '#99ff99', '#ffcc99']

plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%')
plt.title("Gráfica de Tarta con Colores Personalizados")
plt.show()

Esta opción permite obtener un control total sobre el aspecto visual de la gráfica. Pudiendo adaptar este a las necesidades específicas de cada proyecto.

Añadir un efecto de explosión

Para resaltar una porción en particular, se puede recurrir al parámetro explode para "separar" una sección del resto:

explode = (0.1, 0, 0, 0)  # Solo explotar la primera porción

plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%')
plt.title("Gráfica de Tarta con Efecto de Explosión")
plt.show()

El parámetro explode es una tupla que define cuánto se separa cada porción. Cada valor de la tupla corresponde a una porción. En este caso, el valor 0.1 explota solo la primera porción (10% de distancia hacia fuera), mientras que las otras se mantienen sin explotar (0).

Convertir la gráfica de tarta en una de tipo donut

Una gráfica de donut (o anillos) es simplemente una gráfica de tarta con un agujero en el centro. Algo que se puede lograr ajustando el parámetro wedgeprops:

plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', wedgeprops={'width': 0.3})
plt.title("Gráfica de Donut")
plt.show()

El parámetro wedgeprops recibe un diccionario con propiedades mediante las cuales se modifica el estilo de las porciones. En este caso, el valor {'width': 0.3} reduce el ancho de cada porción a un 30% del total, creando el efecto de un donut o anillo al dejar un agujero en el centro.

Agregar una Leyenda

Finalmente, una gráfica de tarta puede beneficiarse de una leyenda que explique el valor de las porciones:

plt.pie(sizes, colors=colors)
plt.legend(labels, title="Categorías")
plt.title("Gráfica de Tarta con Leyenda")
plt.show()

En este caso se ha agregado la leyenda y eliminado las etiquetas para evitar redundancia.

Conclusiones

Las gráficas de tarta son una herramienta visual con la que se puede mostrar el peso de varias categorías en un conjunto de datos. Por lo que es uno de los gráficos básicos de Matplotlib. En esta entrada se ha visto cómo crear una gráfica de tarta básica, agregarle valores, configurar los colores, añadir un efecto explosión, convertida en una de tipo donut o anillo y agregar una leyenda.


Volver a la Portada de Logo Paperblog