Diagrama de sectores (pie chart) en matplotlib

La función pie de matplotlib

Dado un conjunto de categorías o grupos con sus correspondientes valores puedes utilizar la función pie de matplotlib para crear un diagrama de sectores, también llamado gráfico circular o pie chart en inglés. Pasa las etiquetas y valores a la función para crear un pie chart con los grupos en sentido contrario a las agujas del reloj, como en el ejemplo siguiente. Ten en cuenta que por defecto el área de las porciones se calculará como cada valor dividido entra la suma total de los valores.

import matplotlib.pyplot as plt

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

# Pie chart
fig, ax = plt.subplots()
ax.pie(valor, labels = grupos)
# plt.show()

Pie chart en matplotlib

Diagrama de sectores parcial

Si tus datos no suman uno y no quieres que que los datos se normalicen puedes pasar normalize = False, de modo que se creará lo que se conoce como pie chart parcial.

import matplotlib.pyplot as plt

# Datos
grupos = ["G1", "G2", "G3", "G4", "G5"]
valor = [0.1, 0.2, 0.1, 0.2, 0.1]

# Pie chart
fig, ax = plt.subplots()
ax.pie(valor, labels = grupos, normalize = False)
# plt.show()

Pie chart parcial en Python

Pie chart en el sentido de las agujas del reloj

Tal y como se comentó antes, el pie chart se creará por defecto con los grupos en sentido contrario a las agujas del reloj. Para que vayan en sentido de las agujas establece el argumento counterclock como False.

import matplotlib.pyplot as plt

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

# Pie chart
fig, ax = plt.subplots()
ax.pie(valor, labels = grupos, counterclock = False)
# plt.show()

Diagrama de sectores en el sentido de las agujas del reloj en matplotlib

Ángulo inicial

Los sectores se rotarán en sentido contrario de las agujas desde el eje X. Puedes cambiar el ángulo inicial con startangle. Como ejemplo, si estableces este argumento como 90 el primer sector empezará a rotar en sentido contrario de las agujas del reloj de manera perpendicular al eje X.

import matplotlib.pyplot as plt

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

# Pie chart
fig, ax = plt.subplots()
ax.pie(valor, labels = grupos, startangle = 90)
# plt.show()

Start angle of the slices of the pie chart in Python

Tamaño (radio)

El tamaño del gráfico se puede controlar con el argumento radius, que por defecto es 1.

import matplotlib.pyplot as plt

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

# Pie chart
fig, ax = plt.subplots()
ax.pie(valor, labels = grupos, radius = 0.5)
# plt.show()

Tamaño del pie chart en Python

“Explotar” sectores

Ten en cuenta que también puedes “explotar” sectores del gráfico pasando un array del mismo tamaño que los datos a explode.

import matplotlib.pyplot as plt

# Datos
grupos = ["G1", "G2", "G3", "G4", "G5"]
valor = [12, 22, 16, 38, 12]
explode = [0, 0, 0, 0.1, 0]

# Pie chart
fig, ax = plt.subplots()
ax.pie(valor, labels = grupos, explode = explode)
# plt.show()

Separar un sector de un gráfico de sectores en Python con el argumento explode

Agregar una sombra

La función pie también permite agregar una sombra al gráfico de tarta estableciendo el argumento shadow como True.

import matplotlib.pyplot as plt

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

# Pie chart
fig, ax = plt.subplots()
ax.pie(valor, labels = grupos, shadow = True)
# plt.show()

Agregar una sombra un gráfico de tarta en Python

Agregar el marco del gráfico

Puede que hayas notado que por defecto el gráfico no muestra el típico marco o caja de los gráficos creados con matplotlib. En caso de que quieras agregarlos puedes establecer frame = True.

import matplotlib.pyplot as plt

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

# Pie chart
fig, ax = plt.subplots()
ax.pie(valor, labels = grupos, frame = True)
# plt.show()

Pie chart con marco en matplotlib

Etiquetas

Pie chart con porcentajes

Además de las etiquetas de los grupos también se puede mostrar la cuenta o los porcentajes para cada sector con el argumento autopct, tal y como se observa a continuación.

Pie chart con porcentajes en Python

import matplotlib.pyplot as plt

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

# Pie chart
fig, ax = plt.subplots()
ax.pie(valor, labels = grupos, autopct = '%1.1f%%')
# plt.show()

Distancia desde el origen de las etiquetas de los porcentajes

Ten en cuenta que también puedes personalizar la distancia de estas etiquetas desde el origen con pctdistance y mostrarlas en lugar de las etiquetas de los grupos. El valor por defecto del argumento es 0.6.

Posición de las etiquetas de los porcentajes de un pie chart en Python

import matplotlib.pyplot as plt

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

# Pie chart
fig, ax = plt.subplots()
ax.pie(valor, autopct = '%1.1f%%', pctdistance = 1.1)
# plt.show()

Distancia de las etiquetas de los grupos al origen

Además, también puedes modificar la distancia por defecto (1.1 para un sector de radio 1) de las etiquetas de las categorías con labeldistance.

Posición de las etiquetas de un diagrama de sectores en Python

import matplotlib.pyplot as plt

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

# Pie chart
fig, ax = plt.subplots()
ax.pie(valor, labels = grupos, labeldistance = 0.9)
# plt.show()

Rotar las etiquetas

Por último, también es posible rotar las etiquetas de los grupos en el ángulo de cada sector estableciendo rotatelabels como True.

Rotar las etiquetas de los grupos de un pie chart hecho con matplotlib

import matplotlib.pyplot as plt

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

# Pie chart
fig, ax = plt.subplots()
ax.pie(valor, labels = grupos, rotatelabels = True)
# plt.show()

Colores

El argumento colors permite personalizar los colores de cada porción. Como entrada puedes pasar un array de colores en el mismo orden que las categorías para personalizar el color de cada una.

import matplotlib.pyplot as plt

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

# Pie chart
fig, ax = plt.subplots()
ax.pie(valor, labels = grupos, colors = colores)
# plt.show()

Cambiar el color de fondo de los sectores de un pie chart hecho con Python

Color del borde

Si quieres agregar un borde a los sectores puedes utilizar el argumento wedgeprops y establecer un grosor de línea y un color de borde con un diccionario, como en el ejemplo siguiente.

import matplotlib.pyplot as plt

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

# Pie chart
fig, ax = plt.subplots()
ax.pie(valor, labels = grupos, colors = colores,
       wedgeprops = {"linewidth": 1, "edgecolor": "white"})
# plt.show()

Agregar y personalizar el color de borde de los sectores de un pie chart en Python

Better Data Visualizations

A Guide for Scholars, Researchers, and Wonks

Comprar en Amazon
Fundamentals of Data Visualization

A Primer on Making Informative and Compelling Figures

Comprar en Amazon

También te puede interesar