馃ェ Matplotlib: C贸mo Crear Gr谩ficos de Tarta (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