Gráficos de Pastel

Python
code
Visualization
Author

Marco Aguirre

Published

September 24, 2025

Representan proporciones de un todo: cada sector equivale a una fracción de 100%. Se basan en la lectura de ángulos y áreas, lo que es difícil para la percepción humana. Se usan principalmente para mostrar porcentajes simples con pocas categorías. Son visualmente reconocibles y llamativos como tipo de gráfico estándar.

Cuándo usar

  • Cuando se tienen muy pocas categorías (idealmente entre 2 y 4).
  • Para mostrar de manera simple cómo una parte se compara con el todo.
  • En situaciones donde el público está acostumbrado a este tipo de gráfico.

Errores comunes

  1. Incluir demasiadas categorías, más de 5–6 sectores.
  2. Comparar múltiples gráficos de pastel, lo cual dificulta ver patrones o cambios.
  3. Usar efectos en 3D que distorsionan la percepción.
  4. Colocar la leyenda separada, obligando a saltar la vista.
  5. Utilizar sectores explotados (exploded pie) que rompen la proporción.
  6. Mostrar porcentajes que no suman 100%.
  7. Emplear colores demasiado similares que impiden distinguir categorías.

Alternativas

  • Gráfico de barras: más preciso y fácil de comparar valores.
  • Lollipop chart: variante clara y elegante para varias categorías.
  • Treemap: adecuado para mostrar la composición de un todo con muchas partes.

Dataset: Precios Agroindustria de Cacao (2012 - 2025)

Archivo: MAG_PreciosAgroindustriaCacao_2025Junio.csv
Fuente: Ministerio de Agricultura y Ganadería (MAG), Ecuador
Última actualización: Junio 2025

import pandas as pd
df = pd.read_csv("mag_preciosagroindustriacacao_2025junio.csv", sep=";")
print(df.head())
print(df.info())
   PACC_ANIO PACC_MES DPA_PROVINCIA DPA_CANTON        PACC_PRODUCTO  \
0       2012    Enero        El Oro  Arenillas  Cacao seco mezclado   
1       2012    Enero        El Oro  Arenillas  Cacao seco mezclado   
2       2012    Enero        El Oro   El Guabo  Cacao seco mezclado   
3       2012    Enero        El Oro   El Guabo  Cacao seco mezclado   
4       2012    Enero        El Oro    Machala  Cacao seco mezclado   

          PACC_PRESENTACION PACC_TIPO  PACC_PRECIO_USD  PACC_USD_KG  
0  Quintal de 100,00 libras    Compra            71.41         1.57  
1  Quintal de 100,00 libras     Venta            74.06         1.63  
2  Quintal de 100,00 libras    Compra            73.75         1.63  
3  Quintal de 100,00 libras     Venta            84.00         1.85  
4  Quintal de 100,00 libras    Compra            75.00         1.65  
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 26246 entries, 0 to 26245
Data columns (total 9 columns):
 #   Column             Non-Null Count  Dtype  
---  ------             --------------  -----  
 0   PACC_ANIO          26246 non-null  int64  
 1   PACC_MES           26246 non-null  object 
 2   DPA_PROVINCIA      26246 non-null  object 
 3   DPA_CANTON         26246 non-null  object 
 4   PACC_PRODUCTO      26246 non-null  object 
 5   PACC_PRESENTACION  26246 non-null  object 
 6   PACC_TIPO          26246 non-null  object 
 7   PACC_PRECIO_USD    26246 non-null  float64
 8   PACC_USD_KG        26246 non-null  float64
dtypes: float64(2), int64(1), object(6)
memory usage: 1.8+ MB
None
import plotly.express as px
import plotly.io as pio
import numpy as np
pio.renderers.default = "notebook"
# Agrupar por provincia y cantón y calcular promedio
df = df[df["DPA_PROVINCIA"] == 'Sucumbios']
df_group = (
    df.groupby([ "DPA_CANTON"], as_index=False)["PACC_PRECIO_USD"]
    .mean()
    .round(2)
)
df_group.head()
DPA_CANTON PACC_PRECIO_USD
0 Cascales 62.41
1 Lago Agrio 100.49
2 Shushufindi 86.30
# Gráfico de pastel usando el promedio de precio por cantón
fig = px.pie(
    df_group,
    values="PACC_PRECIO_USD",
    names="DPA_CANTON",
    title="Distribución promedio de precios de cacao por cantón",
    hole=0.3  # si quieres tipo dona
)

fig.show()
import plotly.graph_objects as go

# Creamos la figura con los datos del dataframe agrupado
fig = go.Figure(data=[go.Pie(
    labels=df_group["DPA_CANTON"],   # nombres de los cantones
    values=df_group["PACC_PRECIO_USD"],  # valores promedio
    textinfo='label+percent',
    insidetextorientation='radial',
    hole=0.3  # para hacerlo tipo dona
)])

# Título del gráfico
fig.update_layout(
    title="Distribución promedio de precios de cacao en Sucumbios"
)

fig.show()