Gráfico piramidal de población
Naren Castellon
Specialist in Time Series, Machine learning, Deep learning, Data science, Mathematics, Statistics, Finance, Youtuber
Los gráficos piramidales de población son una herramienta importante en el análisis demográfico que nos permite visualizar la distribución por edad y género de una población. Estos gráficos suelen mostrar dos conjuntos de barras horizontales, una para cada género, y cada barra representa un grupo de edad diferente. La longitud de cada barra corresponde a la proporción de la población en ese grupo de edad y género. Esto nos permite identificar fácilmente las tendencias en el crecimiento de la población, el envejecimiento y los desequilibrios de género.
Usaremos la libreria de Matplotlib es una potente biblioteca de visualización de datos en Python que se puede utilizar para crear gráficos piramidales de población. Con su amplia gama de funciones de trazado y opciones de personalización, Matplotlib proporciona una forma flexible e intuitiva de crear gráficos piramidales de población informativos y visualmente atractivos.
Cargar datos
El siguiente código crea un conjunto de datos que usaremos para crear un gráfico piramidal.
Vamos a Crear tres listas de datos:
Luego crea un DataFrame de pandas llamado population_df pasando un diccionario que contiene las tres listas de datos.
A continuación, vamos agregar cuatro nuevas columnas al DataFrame llamadas Female_Left, Female_Width, Male_Left y Male_Width.
Estas columnas se utilizarán para crear barras horizontales para el gráfico piramidal.
import pandas as pd
age = ["0-4", "5-9", "10-14", "15-19", "20-24", "25-29", "30-34", "35-39", "40-44", "45-49", "50-54", "55-59",
"60-64", "65-69", "70-74", "75-79", "80-84", "85-89", "90+"]
male = [3, 3.3, 3.4, 3.2, 3, 3.3, 3.7, 3.9, 3.5, 3.1, 3.4, 2.8, 2.4, 2.1, 1.8, 1.4, 0.8, 0.4, 0.1]
female = [2.9, 3.1, 3.2, 3, 3, 3.4, 3.9, 4, 3.6, 3.2, 3.5, 2.9, 2.5, 2.3, 2.2, 2, 1.4, 0.9, 0.5]
population_df = pd.DataFrame({"Age": age, "Male": male, "Female": female})
population_df["Female_Left"] = 0
population_df["Female_Width"] = population_df["Female"]
population_df["Male_Left"] = -population_df["Male"]
population_df["Male_Width"] = population_df["Male"]
population_df
Gráfico de la pirámide de población
Aquí, hemos creado nuestra pirámide de población utilizando el conjunto de datos que creado anteriormente.
Las dos líneas siguientes utilizan la función plt.barh() para crear gráficos de barras horizontales para los datos de población masculina y femenina. El parámetro y especifica los valores del eje y para las barras, que en este caso son los grupos de edad del DataFrame. El parámetro ancho especifica el ancho de las barras, que son los porcentajes de población masculina o femenina correspondientes para cada grupo de edad del DataFrame. El parámetro izquierdo se utiliza en el gráfico de población masculina para especificar la posición horizontal de las barras en el lado izquierdo del eje y.
La función plt.text() se utiliza para agregar las etiquetas "Masculino" y "Femenino" al gráfico, con las posiciones x e y correspondientes especificadas. Luego se utiliza un bucle for para agregar etiquetas de porcentaje para cada grupo de edad al gráfico, con las posiciones x e y correspondientes calculadas en función de los valores en el marco de datos.
La función plt.xlim() se usa para establecer los límites del eje x, y la función plt.xticks() se usa para especificar las etiquetas de marca para el eje x. La función plt.legend() se usa para agregar una leyenda al gráfico, y las funciones plt.xlabel(), plt.ylabel() y plt.title() se usan para agregar etiquetas y un título al gráfico.
En general, este código crea un gráfico piramidal de población que muestra los porcentajes de población masculina y femenina para cada grupo de edad. El gráfico es una herramienta de visualización útil para comprender la distribución por edad y género de una población.
female_color = "#ee7a87"
male_color = "#4682b4"
fig = plt.figure(figsize=(15,10))
plt.barh(y=population_df["Age"], width=population_df["Female_Width"], color="#ee7a87", label="Female");
plt.barh(y=population_df["Age"], width=population_df["Male_Width"], left=population_df["Male_Left"],
color="#4682b4", label="Male");
plt.text(-5, 17, "Male", fontsize=25, fontweight="bold");
plt.text(4, 17, "Female", fontsize=25, fontweight="bold");
for idx in range(len(population_df)):
plt.text(x=population_df["Male_Left"][idx]-0.1, y=idx, s="{} %".format(population_df["Male"][idx]),
ha="right", va="center",
fontsize=15, color="#4682b4");
plt.text(x=population_df["Female_Width"][idx]+0.1, y=idx, s="{} %".format(population_df["Female"][idx]),
ha="left", va="center",
fontsize=15, color="#ee7a87");
plt.xlim(-7,7);
plt.xticks(range(-7,8), ["{} %".format(i) for i in range(-7,8)]);
plt.legend(loc="best");
plt.xlabel("Percent (%)", fontsize=16, fontweight="bold")
plt.ylabel("Age Range", fontsize=16, fontweight="bold")
plt.title("Population Pyramid Chart", loc="left", pad=20, fontsize=25, fontweight="bold");
A continuación, simplemente hemos incluido nuestro código para el gráfico piramidal en el administrador de contexto llamando al método plt.style.context(). Establece el tema para el gráfico para mejorar su apariencia.
Estilo de gráficos Matplotlib | Cambiar tema de gráficos Matplotlib
with plt.style.context("ggplot"):
fig = plt.figure(figsize=(15,10))
plt.barh(y=population_df["Age"], width=population_df["Female_Width"], color="#ee7a87", label="Female");
plt.barh(y=population_df["Age"], width=population_df["Male_Width"], left=population_df["Male_Left"],
color="#4682b4", label="Male");
plt.text(-5, 17, "Male", fontsize=25, fontweight="bold");
plt.text(4, 17, "Female", fontsize=25, fontweight="bold");
for idx in range(len(population_df)):
plt.text(x=population_df["Male_Left"][idx]-0.1, y=idx, s="{} %".format(population_df["Male"][idx]),
ha="right", va="center",
fontsize=15, color="#4682b4");
plt.text(x=population_df["Female_Width"][idx]+0.1, y=idx, s="{} %".format(population_df["Female"][idx]),
ha="left", va="center",
fontsize=15, color="#ee7a87");
plt.xlim(-7,7);
plt.xticks(range(-7,8), ["{} %".format(i) for i in range(-7,8)]);
plt.legend(loc="best");
plt.grid(False);
plt.xlabel("Percent (%)", fontsize=16, fontweight="bold")
plt.ylabel("Age Range", fontsize=16, fontweight="bold")
plt.title("Population Pyramid Chart", loc="left", pad=20, fontsize=25, fontweight="bold");
Espero que sea de mucha utilidad este contenido.