Gráficos de torta con MatplotLib

Publicado por Andrea Navarro en

En este artículo veremos como crear y personalizar un gráfico de torta utilizando la librería de Python Matplotlib.

La librería Matplotlib permite la creación de diferentes tipos de gráficos utilizando estructuras de datos de Python como listas, diccionarios, arreglos de Numpy y DataFrames de Pandas.

Para crear un gráfico de torta solo es necesario una lista de valores enteros o flotantes que representarán las porciones del gráfico. Una vez creados la figura y los ejes se genera el gráfico utilizando el método pie y pasando la lista de valores como argumento.

import matplotlib.pyplot as plt

valores = [25,12,75,43,12]
fig, ax = plt.subplots()
plt.pie(valores)
plt.show()

El resultado mostrará un gráfico de torta donde cada porción representa el porcentaje que cada valor representa en el total. Por defecto cada valor será representado por un color diferente.

Etiquetas

Para especificar la característica asociada a cada valor del gráfico de torta pueden utilizarse etiquetas. Las etiquetas deben estar en forma de lista donde el orden debe corresponder con el equivalente a la lista de valores. Esta lista de etiquetas se pasan en el gráfico con el argumento labels.

import matplotlib.pyplot as plt

valores = [25,12,75,43,12]
etiquetas = ["Opción A","Opción B","Opción C","Opción D","Opción E"]
fig, ax = plt.subplots()
plt.pie(valores, labels=etiquetas)
plt.show()

Las etiquetas se mostrarán en el gráfico por fuera de las secciones correspondientes.

La posición de estas etiquetas pueden modificarse utilizando el argumento labeldistance. El valor por defecto es de 1.1 y cualquier valor por debajo de 1 ubicará las etiquetas dentro del gráfico de torta.

import matplotlib.pyplot as plt

valores = [25,12,75,43,12]
etiquetas = ["Opción A","Opción B","Opción C","Opción D","Opción E"]
fig, ax = plt.subplots()
plt.pie(valores, labels=etiquetas ,labeldistance=0.9)
plt.show()

Leyenda

Otra forma de especificar a que corresponde cada porción del gráfico de torta es utilizar leyendas. Para crear el cuadro de leyenda se utiliza el método legend luego de generar el gráfico pasando como argumento la lista de etiquetas.

import matplotlib.pyplot as plt

valores = [25,12,75,43,12]
etiquetas = ["Opción A","Opción B","Opción C","Opción D","Opción E"]
fig, ax = plt.subplots()
plt.pie(valores)
plt.legend(etiquetas)
plt.show()

Un cuadro se mostrará listando cada color acompañado por la etiqueta correspondiente. Esto es especialmente útil cuando se tienen demasiadas secciones y el texto ocuparía demasiado espacio en el gráfico.

Explode

El método explode permite especificar la posición que ocupará cada fracción del gráfico de tortas. Los valores indicarán la distancia desde el centro del gráfico y deben ser pasados en forma de lista.

import matplotlib.pyplot as plt

valores = [25,12,75,43,12]
etiquetas = ["Opción A","Opción B","Opción C","Opción D","Opción E"]
explode = [0.0, 0.0, 0.2, 0.00, 0.1]
fig, ax = plt.subplots()
plt.pie(valores, labels=etiquetas, explode = explode)
plt.show()

En este gráfico puede observarse como la opción C y E se encuentran separadas mientras que el resto de las secciones no se ha movido.

Mostrar valores

Para mostrar el porcentaje correspondiente a cada porción del gráfico de tortas se utiliza el argumento autopct indicando el formato requerido. Este formato puede especificarse como un string o puede asociarse a una función encargada de dar dicho formato.

import matplotlib.pyplot as plt

valores = [25,12,75,43,12]
etiquetas = ["Opción A","Opción B","Opción C","Opción D","Opción E"]
fig, ax = plt.subplots()
plt.pie(valores, labels=etiquetas, autopct='%.2f%%')
plt.show()

En este ejemplo se muestran los porcentajes en formato float con dos valores decimales seguidos por el símbolo de porcentaje.

La posición de estos valores puede ser modificada utilizando el argumento pctdistance. Este valor determinará a que distancia con respecto al centro del gráfico se mostrarán los porcentajes. Por defecto el valor es 0.5 y si se quiere que los porcentajes aparezcan por fuera del gráfico el valor debe estar por encima de 1.

import matplotlib.pyplot as plt

valores = [25,12,75,43,12]
etiquetas = ["Opción A","Opción B","Opción C","Opción D","Opción E"]
fig, ax = plt.subplots()
plt.pie(valores, labels=etiquetas, autopct='%.2f%%', pctdistance=0.8)
#plt.show()

Colores

Es posible cambiar los colores que se asignan por defecto a cada porción del gráfico pasando una lista de colores utilizando el argumento colors. Matplotlib ofrece diferentes formatos de colores incluyendo mapas de colores, listas de colores por nombres, hexadecimales y otros.

import matplotlib.pyplot as plt

valores = [25,12,75,43,12]
etiquetas = ["Opción A","Opción B","Opción C","Opción D","Opción E"]
colores = ["chocolate","teal","grey","orchid","darkorange","palegreen"]
fig, ax = plt.subplots()
plt.pie(valores, labels=etiquetas, colors=colores)
plt.show()

En este gráfico de tortas pueden observarse los colores configurados.

Patrones

Además de los colores Matplotlib ofrece diferentes tipos de patrones para diferenciar las diferentes porciones. Cada patrón es representado por un valor string y pueden combinarse entre ellos para lograr nuevos patrones. Para aplicarlos debe pasarse una lista de patrones con el argumento hatch.

import matplotlib.pyplot as plt

valores = [25,12,75,43,12]
etiquetas = ["Opción A","Opción B","Opción C","Opción D","Opción E"]
patrones = ["X","O","+","*","//",".."]
fig, ax = plt.subplots()
plt.pie(valores, labels=etiquetas, hatch=patrones)
plt.show()

Rotar

Por defecto, el gráfico de tortas comienza el a ubicar sus porciones comenzando por el eje x y se va moviendo en sentido antihorario hasta completarlo. Es posible modificar el ángulo de inicio utilizando el argumento startangle.

import matplotlib.pyplot as plt

valores = [25,12,75,43,12]
etiquetas = ["Opción A","Opción B","Opción C","Opción D","Opción E"]
fig, ax = plt.subplots()
plt.pie(valores, labels=etiquetas, startangle=100)
plt.show()

Sombra

Es posible agregar una sombra a cada porción del gráfico utilizando el argumento shadow configurado a True. Este efecto solo se apreciará si se ha separado algunas porciones del centro de la torta.

import matplotlib.pyplot as plt

valores = [25,12,75,43,12]
etiquetas = ["Opción A","Opción B","Opción C","Opción D","Opción E"]
explode = [0.05, 0.05, 0.05, 0.05, 0.05]
fig, ax = plt.subplots()
plt.pie(valores, labels=etiquetas, shadow=True, explode=explode)
#plt.show()

Borde

La opción wedgeprops permite pasar un diccionario para configurar los bordes de cada sección del gráfico de torta. Entre las opciones puede especificar el ancho de la linea con linewidth y edgecolor para configurar el color de la linea.

import matplotlib.pyplot as plt

valores = [25,12,75,43,12]
etiquetas = ["Opción A","Opción B","Opción C","Opción D","Opción E"]
borde = { 'linewidth' : 1, 'edgecolor' : "black" }
fig, ax = plt.subplots()
plt.pie(valores, labels=etiquetas, wedgeprops = borde)
#plt.show()

En este artículo hemos visto como crear un gráfico de tortas con Matplotlib. También hemos visto como utilizar diferentes argumentos para personalizar estos gráficos dependiendo de nuestras necesidades. Espero que les sirva!


¿Preguntas? ¿Comentarios?

Si tenés dudas, o querés dejarnos tus comentarios y consultas, sumate al grupo de Telegram de la comunidad JuncoTIC!
¡Te esperamos!

Categorías: Programación

Andrea Navarro

- Ingeniera en Informática - Docente universitaria - Investigadora