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()
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 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()
Á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()
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()
“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()
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 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 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.
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.
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
.
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
.
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()
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()
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()
También te puede interesar