Matplotlib Pie Charts

Matplotlib Logo



Creating Pie Charts

🥧 Los **gráficos circulares** (también conocidos como gráficos de pastel) son una forma popular de visualizar datos categóricos donde cada porción (slice) representa una proporción del total. El área de cada porción es proporcional a la frecuencia o porcentaje de la categoría que representa.

En Matplotlib, puedes crear gráficos circulares utilizando la función `plt.pie(x)`, donde:

  • `x`: Es un array o lista de valores numéricos que representan el tamaño de cada porción. La función `plt.pie()` normalizará automáticamente estos valores para que la suma de las áreas de las porciones sea igual a un círculo completo.

Es importante asegurarse de que la suma de los valores en `x` tenga sentido en el contexto de los datos que estás visualizando (por ejemplo, si representan partes de un todo).

💻 Código de Ejemplo: Creando un gráfico circular básico


import matplotlib.pyplot as plt
import numpy as np

# Datos de ejemplo: distribución de lenguajes de programación populares
sizes = np.array([21.7, 32.5, 28.6, 17.2])
labels = ['Python', 'Java', 'JavaScript', 'C++']

plt.pie(sizes, labels=labels)
plt.title('Distribución de Lenguajes de Programación')
plt.show()
            

Este código genera un gráfico circular donde el tamaño de cada porción está determinado por los valores en el array `sizes`, y cada porción está etiquetada con el lenguaje de programación correspondiente del array `labels`.

📊 Ejemplo Visual Interactivo (Generado con JavaScript)

👆 Este gráfico generado con JavaScript muestra la representación visual de un gráfico circular, donde el tamaño de cada porción representa una proporción del total.

Labels

🏷️ Las **etiquetas** son fundamentales para que un gráfico circular sea comprensible. Indican qué categoría representa cada porción del pastel.

En Matplotlib, puedes añadir etiquetas a las porciones utilizando el argumento `labels` en la función `plt.pie()`. Este argumento debe ser una secuencia (como una lista o un array) de strings, donde cada string corresponde a una porción en el mismo orden que los datos proporcionados en el primer argumento.

Por defecto, las etiquetas se colocan cerca del centro de cada porción. Puedes personalizar la apariencia y la posición de las etiquetas utilizando otros argumentos de `plt.pie()`, como `labeldistance` (para controlar la distancia de la etiqueta desde el centro) y `textprops` (para propiedades del texto como el tamaño y el color).

Además de las etiquetas de categoría, a menudo es útil mostrar el porcentaje que representa cada porción. Esto se puede lograr utilizando el argumento `autopct`. Puedes pasar una cadena de formato (como `'%.1f%%'`) para mostrar los porcentajes con un decimal y el símbolo de porcentaje.

💻 Código de Ejemplo: Añadiendo y formateando etiquetas


import matplotlib.pyplot as plt
import numpy as np

# Datos de ejemplo
sizes = np.array([21.7, 32.5, 28.6, 17.2])
labels = ['Python', 'Java', 'JavaScript', 'C++']

# Añadiendo etiquetas básicas
plt.figure(figsize=(6, 6))
plt.pie(sizes, labels=labels)
plt.title('Distribución de Lenguajes (con etiquetas)')
plt.show()

# Añadiendo porcentajes con autopct
plt.figure(figsize=(6, 6))
plt.pie(sizes, labels=labels, autopct='%.1f%%')
plt.title('Distribución de Lenguajes (con porcentajes)')
plt.show()

# Personalizando la distancia de las etiquetas
plt.figure(figsize=(6, 6))
plt.pie(sizes, labels=labels, autopct='%.1f%%', labeldistance=1.15)
plt.title('Distribución de Lenguajes (distancia de etiquetas)')
plt.show()

# Personalizando las propiedades del texto de las etiquetas
plt.figure(figsize=(6, 6))
plt.pie(sizes, labels=labels, autopct='%1.1f%%', textprops={'fontsize': 12, 'color': 'black'})
plt.title('Distribución de Lenguajes (texto de etiquetas personalizado)')
plt.show()
            

Los ejemplos muestran cómo añadir etiquetas básicas, cómo mostrar porcentajes utilizando `autopct`, cómo ajustar la distancia de las etiquetas desde el centro y cómo personalizar las propiedades del texto de las etiquetas.

📊 Ejemplo Visual Interactivo (Generado con JavaScript)

👆 Este gráfico generado con JavaScript ilustra cómo añadir etiquetas y porcentajes a las porciones de un gráfico circular.

Start Angle

📐 El **ángulo de inicio** de un gráfico circular define dónde comenzará a dibujarse la primera porción. Por defecto, la primera porción comienza en el eje x positivo (ángulo 0) y las siguientes porciones se dibujan en sentido contrario a las agujas del reloj.

Puedes cambiar el ángulo de inicio utilizando el argumento `startangle` en la función `plt.pie()`. El valor de `startangle` se especifica en grados, con el eje x positivo como 0 grados.

Ajustar el ángulo de inicio puede ser útil para:

  • **Resaltar una porción específica:** Puedes iniciar el gráfico de manera que la porción más importante o la primera categoría aparezca en una posición visualmente prominente (por ejemplo, en la parte superior).
  • **Mejorar la disposición de las etiquetas:** En algunos casos, cambiar el ángulo de inicio puede ayudar a evitar que las etiquetas se superpongan o se dibujen en posiciones incómodas.

💻 Código de Ejemplo: Ajustando el ángulo de inicio


import matplotlib.pyplot as plt
import numpy as np

# Datos de ejemplo
sizes = np.array([21.7, 32.5, 28.6, 17.2])
labels = ['Python', 'Java', 'JavaScript', 'C++']

# Ángulo de inicio predeterminado (0 grados)
plt.figure(figsize=(6, 6))
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.title('Ángulo de inicio predeterminado')
plt.show()

# Ángulo de inicio de 90 grados (la primera porción comienza en la parte superior)
plt.figure(figsize=(6, 6))
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
plt.title('Ángulo de inicio = 90 grados')
plt.show()

# Ángulo de inicio de 180 grados (la primera porción comienza a la izquierda)
plt.figure(figsize=(6, 6))
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=180)
plt.title('Ángulo de inicio = 180 grados')
plt.show()
            

Los ejemplos muestran el gráfico con el ángulo de inicio predeterminado (0 grados), con un ángulo de inicio de 90 grados (la primera porción comienza en la parte superior) y con un ángulo de inicio de 180 grados (la primera porción comienza en el lado izquierdo).

📊 Ejemplo Visual Interactivo (Generado con JavaScript)

👆 Este gráfico generado con JavaScript ilustra cómo cambiar el ángulo de inicio de la primera porción en un gráfico circular.

Explode

💥 La característica de **"explode"** en un gráfico circular te permite separar una o varias porciones del centro del círculo. Esto se utiliza a menudo para enfatizar una porción en particular, haciéndola destacar visualmente del resto.

Para "explotar" porciones, utilizas el argumento `explode` en la función `plt.pie()`. Este argumento espera una secuencia (como una lista o un array) de la misma longitud que los datos. Cada valor en la secuencia especifica cuánto se separará la porción correspondiente del centro. Los valores suelen ser pequeños números decimales (por ejemplo, 0.1 para una separación del 10% del radio).

  • Un valor de `0` significa que la porción no se separa.
  • Un valor mayor que `0` indica la fracción del radio por la que se desplaza la porción.

💻 Código de Ejemplo: Explotando porciones del gráfico circular


import matplotlib.pyplot as plt
import numpy as np

# Datos de ejemplo
sizes = np.array([21.7, 32.5, 28.6, 17.2])
labels = ['Python', 'Java', 'JavaScript', 'C++']

# Explotando la primera porción (Python)
explode = [0.1, 0, 0, 0]
plt.figure(figsize=(6, 6))
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True)
plt.title('Gráfico circular con una porción explotada')
plt.show()

# Explotando la porción más grande (Java)
explode_max = [0, 0.1, 0, 0]
plt.figure(figsize=(6, 6))
plt.pie(sizes, explode=explode_max, labels=labels, autopct='%1.1f%%', shadow=True)
plt.title('Gráfico circular con la porción más grande explotada')
plt.show()

# Explotando múltiples porciones
explode_multiple = [0.05, 0.05, 0, 0.1]
plt.figure(figsize=(6, 6))
plt.pie(sizes, explode=explode_multiple, labels=labels, autopct='%1.1f%%', shadow=True)
plt.title('Gráfico circular con múltiples porciones explotadas')
plt.show()
            

Los ejemplos muestran cómo explotar una sola porción (la primera y la más grande) y cómo explotar múltiples porciones del gráfico circular. También se ha añadido la sombra (`shadow=True`) para mejorar el efecto visual de la explosión.

📊 Ejemplo Visual Interactivo (Generado con JavaScript)

👆 Este gráfico generado con JavaScript ilustra cómo separar una porción específica del centro en un gráfico circular.

Shadow

🌑 Añadir una **sombra** a un gráfico circular puede mejorar su apariencia visual, dándole una sensación de profundidad y ayudando a distinguir las porciones.

En Matplotlib, puedes habilitar la sombra utilizando el argumento booleano `shadow` en la función `plt.pie()`. Si estableces `shadow=True`, se dibujará una sombra debajo de las porciones del gráfico, creando un efecto tridimensional sutil.

La sombra se dibuja de forma predeterminada con un cierto nivel de opacidad y desplazamiento. No hay muchos parámetros para personalizar la sombra directamente en `plt.pie()`, pero generalmente el efecto predeterminado es suficiente para añadir un toque visual interesante.

La sombra suele funcionar bien en combinación con la característica "explode", ya que ayuda a enfatizar aún más la separación de las porciones.

💻 Código de Ejemplo: Añadiendo sombra al gráfico circular


import matplotlib.pyplot as plt
import numpy as np

# Datos de ejemplo
sizes = np.array([21.7, 32.5, 28.6, 17.2])
labels = ['Python', 'Java', 'JavaScript', 'C++']

# Gráfico circular sin sombra
plt.figure(figsize=(6, 6))
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.title('Gráfico circular sin sombra')
plt.show()

# Gráfico circular con sombra
plt.figure(figsize=(6, 6))
plt.pie(sizes, labels=labels, autopct='%1.1f%%', shadow=True)
plt.title('Gráfico circular con sombra')
plt.show()

# Gráfico circular con sombra y explosión
explode = [0.1, 0, 0, 0]
plt.figure(figsize=(6, 6))
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True)
plt.title('Gráfico circular con sombra y explosión')
plt.show()
            

Los ejemplos muestran un gráfico circular sin sombra, con sombra habilitada y con sombra habilitada en un gráfico donde una porción también está explotada.

📊 Ejemplo Visual Interactivo (Generado con JavaScript)

👆 Este gráfico generado con JavaScript ilustra cómo añadir un efecto de sombra a las porciones de un gráfico circular.

Colors

🌈 El **color** de cada porción en un gráfico circular es importante para la estética y para distinguir visualmente las diferentes categorías.

En Matplotlib, puedes especificar los colores de las porciones utilizando el argumento `colors` en la función `plt.pie()`. Este argumento espera una secuencia (como una lista o un array) de colores, donde cada color corresponde a una porción en el mismo orden que los datos.

Puedes utilizar varios tipos de especificaciones de color:

  • **Nombres de colores:** Como `'red'`, `'green'`, `'blue'`, `'yellow'`, etc.
  • **Códigos de color hexadecimal:** Como `'#FF0000'` para rojo, `'#008000'` para verde, etc.
  • **Tuplas RGB o RGBA:** Como `(1, 0, 0)` para rojo, `(0, 1, 0, 0.5)` para verde con 50% de transparencia.
  • **Paletas de colores de Matplotlib:** Puedes utilizar paletas de colores predefinidas como `'viridis'`, `'plasma'`, `'Set1'`, etc. Para hacer esto, primero obtienes la paleta y luego la aplicas a las porciones.

Si no se especifica el argumento `colors`, Matplotlib utilizará un conjunto de colores predeterminado.

💻 Código de Ejemplo: Personalizando los colores de las porciones


import matplotlib.pyplot as plt
import numpy as np

# Datos de ejemplo
sizes = np.array([21.7, 32.5, 28.6, 17.2])
labels = ['Python', 'Java', 'JavaScript', 'C++']

# Especificando nombres de colores
colors_names = ['skyblue', 'lightcoral', 'lightgreen', 'orange']
plt.figure(figsize=(6, 6))
plt.pie(sizes, labels=labels, autopct='%1.1f%%', colors=colors_names)
plt.title('Gráfico circular con nombres de colores')
plt.show()

# Especificando códigos hexadecimales
colors_hex = ['#a8dadc', '#457b9d', '#1d3557', '#e63946']
plt.figure(figsize=(6, 6))
plt.pie(sizes, labels=labels, autopct='%1.1f%%', colors=colors_hex)
plt.title('Gráfico circular con códigos hexadecimales')
plt.show()

# Utilizando una paleta de colores de Matplotlib
cmap = plt.cm.viridis
colors_cmap = [cmap(i/len(sizes)) for i in range(len(sizes))]
plt.figure(figsize=(6, 6))
plt.pie(sizes, labels=labels, autopct='%1.1f%%', colors=colors_cmap)
plt.title('Gráfico circular con paleta de colores Viridis')
plt.show()
            

Los ejemplos muestran cómo especificar los colores utilizando nombres de colores, códigos hexadecimales y una paleta de colores predefinida de Matplotlib.

📊 Ejemplo Visual Interactivo (Generado con JavaScript)

👆 Este gráfico generado con JavaScript ilustra cómo personalizar los colores de las porciones en un gráfico circular.

Legend

🔑 Una **leyenda** en un gráfico circular es una lista que asocia cada color (y por lo tanto, cada porción) con su etiqueta correspondiente. Es especialmente útil cuando no se muestran etiquetas directamente en las porciones o cuando hay muchas porciones y las etiquetas dentro del gráfico podrían volverse ilegibles.

En Matplotlib, puedes añadir una leyenda utilizando la función `plt.legend()`. Por lo general, llamas a `plt.legend()` después de haber creado el gráfico con `plt.pie()`. Matplotlib automáticamente intentará inferir las etiquetas de la leyenda basándose en el argumento `labels` que proporcionaste a `plt.pie()`. Si no proporcionaste etiquetas, la leyenda no se mostrará a menos que pases explícitamente las etiquetas a `plt.legend()`.

Puedes personalizar la ubicación de la leyenda utilizando el argumento `loc` dentro de `plt.legend()`. Algunas opciones comunes para `loc` incluyen `'best'` (Matplotlib elige la ubicación más óptima), `'upper right'`, `'upper left'`, `'lower right'`, `'lower left'`, `'right'`, `'center left'`, `'center right'`, `'lower center'`, `'upper center'`, y `'center'`. También puedes especificar la ubicación utilizando una tupla de coordenadas.

💻 Código de Ejemplo: Añadiendo una leyenda al gráfico circular


import matplotlib.pyplot as plt
import numpy as np

# Datos de ejemplo
sizes = np.array([21.7, 32.5, 28.6, 17.2])
labels = ['Python', 'Java', 'JavaScript', 'C++']
colors = ['skyblue', 'lightcoral', 'lightgreen', 'orange']

# Gráfico circular con etiquetas en las porciones y leyenda
plt.figure(figsize=(6, 6))
plt.pie(sizes, labels=labels, autopct='%1.1f%%', colors=colors)
plt.title('Gráfico circular con etiquetas y leyenda')
plt.legend()
plt.show()

# Gráfico circular solo con leyenda (sin etiquetas en las porciones)
plt.figure(figsize=(6, 6))
plt.pie(sizes, colors=colors)
plt.title('Gráfico circular solo con leyenda')
plt.legend(labels, loc='best')
plt.show()

# Gráfico circular con leyenda en una ubicación específica
plt.figure(figsize=(6, 6))
plt.pie(sizes, colors=colors)
plt.title('Gráfico circular con leyenda en la esquina superior izquierda')
plt.legend(labels, loc='upper left')
plt.show()
            

Los ejemplos muestran cómo añadir una leyenda cuando se tienen etiquetas en las porciones, cómo mostrar solo la leyenda sin etiquetas en las porciones y cómo ubicar la leyenda en diferentes partes del gráfico.

📊 Ejemplo Visual Interactivo (Generado con JavaScript)

👆 Este gráfico generado con JavaScript ilustra cómo añadir y posicionar una leyenda en un gráfico circular.




Publicar un comentario

0 Comentarios