Gráfico piramidal de población

Gráfico piramidal de población

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:

  • grupos de edad,
  • porcentajes de población masculina para cada grupo de edad y
  • porcentajes de población femenina para cada grupo de edad.

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.

  • La columna Female_Left se establece inicialmente en 0 para todas las filas, mientras que la columna Female_Width se establece en el porcentaje de población femenina correspondiente para cada grupo de edad.
  • La columna Male_Left se establece en el negativo del porcentaje de población masculina correspondiente para cada grupo de edad (esto se debe a que los porcentajes de la población masculina se trazarán a la izquierda del eje y), y la columna Male_Width se establece en el porcentaje de población masculina correspondiente para cada grupo de edad.

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.

要查看或添加评论,请登录

Naren Castellon的更多文章

  • Pronostico de Población con Arima usando StatsForecast.

    Pronostico de Población con Arima usando StatsForecast.

    Introducción La modelación de series de tiempo aplicada al pronóstico de la evolución de la población marroquí por edad…

  • AutoArima con StatsForecast

    AutoArima con StatsForecast

    AutoArima con StatsForecast Un autoARIMA es un modelo de series de tiempo que utiliza un proceso automático para…

  • Pruebas de Normalidad con Python

    Pruebas de Normalidad con Python

    Tipos de pruebas de normalidad Hay varios métodos para investigar la normalidad de un conjunto de datos. Algunos de los…

  • ?Qué es la multicolinealidad en serie de tiempo?

    ?Qué es la multicolinealidad en serie de tiempo?

    ?Qué es la multicolinealidad en serie de tiempo? La multicolinealidad en series de tiempo es una condición en la que…

  • Ajuste lineal OLS para Matriz Hilbert

    Ajuste lineal OLS para Matriz Hilbert

  • Estacionariedad en la Serie de Tiempo

    Estacionariedad en la Serie de Tiempo

    Uno de las ideas y concepto más importe de la Series de tiempo es el concepto de Serie Estacionaria. Este concepto de…

    1 条评论
  • Introduction to Apache Spark's ML library.

    Introduction to Apache Spark's ML library.

    MLlib is Apache Spark's native ML library. Being a native library, MLlib has tight integration with the rest of Spark's…

    2 条评论