Tutorial: Aprende a crear gráficos circulares (pastel) con Python y Matplotlib

Hay muchas bibliotecas de visualización de datos en Python, pero Matplotlib es la biblioteca más popular de todas. La popularidad de Matplotlib se debe a su confiabilidad y utilidad: es capaz de crear gráficos simples y complejos con poco código. También puede personalizar los gráficos de varias formas.

En este tutorial, cubriremos cómo trazar un gráfico circular en Matplotlib.

Los gráficos circulares representan datos desglosados ​​en categorías / etiquetas. Son una forma intuitiva y sencilla de visualizar datos proporcionales, como porcentajes.

Trazar un gráfico circular en Matplotlib

Para trazar un gráfico circular en Matplotlib, podemos llamar a la función de PyPlot pie() o instancia Axes.

El único argumento obligatorio son los datos que nos gustaría trazar, como una característica de un conjunto de datos:

import matplotlib.pyplot as plt

x = [15, 25, 25, 30, 5]

fig, ax = plt.subplots()
ax.plot(x)
plt.show()

Esto genera un gráfico circular bastante simple, con cada valor asignado a una porción proporcionalmente grande del pastel:

simple matplotlib pie chart

Agreguemos algunas etiquetas, para que sea más fácil distinguir qué es qué aquí:

import matplotlib.pyplot as plt

x = [15, 25, 25, 30, 5]
labels = ['Very Likely', 'Likely', 'Unsure', 'Unlikely', 'Very Unlikely']

fig, ax = plt.subplots()
ax.pie(x, labels = labels)
ax.set_title('Survery responses')
plt.show()

Ahora, el Pie Chart tendrá algunos datos adicionales que nos permitirán interpretarlo un poco más fácilmente:

pie chart with labels matplotlib

Personalización de gráficos circulares en Matplotlib

Al preparar visualizaciones de datos para presentaciones, artículos o simplemente para compartirlas con sus compañeros, es posible que desee estilizarlas y personalizarlas un poco, como usar diferentes colores, que se correlacionen con las categorías, mostrando porcentajes en sectores, en lugar de solo confiando en la percepción visual, o explotando cortes para resaltarlos.

Echemos un vistazo a cómo Matplotlib nos permite personalizar los gráficos circulares.

Cambiar los colores del gráfico circular

Para cambiar los colores de un gráfico circular en Matplotlib, necesitaremos proporcionar una matriz de colores al colorsargumento, mientras lo trazamos:

import matplotlib.pyplot as plt

x = [15, 25, 25, 30, 5]
labels = ['Very Likely', 'Likely', 'Unsure', 'Unlikely', 'Very Unlikely']
colors = ['tab:blue', 'tab:cyan', 'tab:gray', 'tab:orange', 'tab:red']

fig, ax = plt.subplots()
ax.pie(x, labels = labels, colors = colors)
ax.set_title('Survery responses')
plt.show()

Aquí, hemos creado una correlación realmente simple entre las respuestas y los colores que se les asignan. Very Likely estará azul, mientras Very Unlikely estará rojo.

Ejecutar este código da como resultado:

changing colors of matplotlib pie chart

Mostrar porcentajes en las rebanadas

Al observar el gráfico circular que hemos realizado hasta ahora, está claro que hay más UnsureLikely encuestados que otras categorías individualmente. Sin embargo, es a menudo más fácil para nosotros tanto interpretar un gráfico de sectores visual y numéricamente.

Para agregar porcentajes numéricos a cada porción, usamos el argumento autopct. Establece automáticamente los porcentajes en cada sector y acepta la notación de formato de cadena de Python estándar:

import matplotlib.pyplot as plt

x = [15, 25, 25, 30, 5]
labels = ['Very Likely', 'Likely', 'Unsure', 'Unlikely', 'Very Unlikely']
colors = ['tab:blue', 'tab:cyan', 'tab:gray', 'tab:orange', 'tab:red']

fig, ax = plt.subplots()
ax.pie(x, labels = labels, colors = colors, autopct='%.0f%%')
ax.set_title('Survery responses')
plt.show()

Al establecer autopct en %.0f%%, elegimos formatear los porcentajes con 0 lugares decimales (solo números enteros) y agregamos un signo de % al final. Si hubiéramos omitido los %..% de símbolos circundantes, las cadenas no se formatearían como porcentajes, sino como valores literales.

Ejecutar este código da como resultado:

adding percentage labels to pie chart in matplotlib

Explotar / resaltar Areas

A veces, es importante resaltar ciertas entradas. Por ejemplo, en nuestra encuesta, un porcentaje muy pequeño de los encuestados siente que el advenimiento de algo en cuestión es Very Unlikely. Suponiendo que nos gustaría señalar el hecho de que la mayoría de la gente no cree que sea improbable, podemos hacer resaltar la brecha:

import matplotlib.pyplot as plt

x = [15, 25, 25, 30, 5]
labels = ['Very Likely', 'Likely', 'Unsure', 'Unlikely', 'Very Unlikely']
colors = ['tab:blue', 'tab:cyan', 'tab:gray', 'tab:orange', 'tab:red']
explode = [0, 0, 0, 0, 0.2]

fig, ax = plt.subplots()
ax.pie(x, labels = labels, colors = colors, autopct='%.0f%%', explode = explode)
ax.set_title('Survery responses')
plt.show()

El argumento explode acepta una matriz de valores, desde 0..1, donde los valores mismos definen qué tan lejos está la cuña del centro. De forma predeterminada, todas las cuñas tienen un valor explode de 0, por lo que todas están conectadas al centro.

Si este valor de 1 compensaría por una gran cantidad, en relación con la tabla, por lo general, se resaltará por cuñas 0.10.20.3, y valores similares. Puede resaltar tantos de ellos como desee, con diferentes valores para resaltar diferentes categorías.

Ejecutar este código da como resultado:

highlighting pie chart wedges with explode in matplotlib

Agregar una sombra

Para agregar una sombra a un gráfico circular de Matplotlib, todo lo que tiene que hacer es establecer el argumento shadow en True:

import matplotlib.pyplot as plt

x = [15, 25, 25, 30, 5]
labels = ['Very Likely', 'Likely', 'Unsure', 'Unlikely', 'Very Unlikely']
colors = ['tab:blue', 'tab:cyan', 'tab:gray', 'tab:orange', 'tab:red']
explode = [0, 0, 0, 0, 0.2]

fig, ax = plt.subplots()
ax.pie(x, labels = labels, 
          colors = colors, 
          autopct='%.0f%%', 
          explode = explode, 
          shadow = True)
          
ax.set_title('Survery responses')
plt.show()

Esto resulta en:

adding a shadow to a pie chart in matplotlib

Gráfico circular giratorio

Finalmente, también puede rotar el gráfico, estableciendo el ángulo de inicio. Hasta ahora, comienza en 0 grados (mano derecha) y cuñas pobladas en sentido antihorario. Al establecer el argumento startangle en un número entre 0..360, puede hacer un círculo completo:

import matplotlib.pyplot as plt

x = [15, 25, 25, 30, 5]
labels = ['Very Likely', 'Likely', 'Unsure', 'Unlikely', 'Very Unlikely']
colors = ['tab:blue', 'tab:cyan', 'tab:gray', 'tab:orange', 'tab:red']
explode = [0, 0, 0, 0, 0.2]

fig, ax = plt.subplots()
ax.pie(x, labels = labels,
          colors = colors,
          autopct='%.0f%%',
          explode = explode,
          shadow = True,
          startangle = 180)

ax.set_title('Survery responses')
plt.show()

Esto da como resultado un gráfico circular, girado 180 grados, volteándolo efectivamente hacia el otro lado:

rotating pie charts in matplotlib

Conclusión

En este tutorial, hemos repasado cómo trazar un gráfico circular simple en Matplotlib con Python. Hemos repasado los gráficos circulares simples y luego nos hemos sumergido en cómo personalizarlos tanto para usos estéticos como prácticos.


También te podría gustar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.