Pirámide de población en matplotlib

Datos de ejemplo

Considera los siguientes datos a modo de ejemplo:

# Datos
age_groups = ["0-9", "10-19", "20-29", "30-39", "40-49", "50-59", "60-69", "70+"]
male = [12, 14, 16, 15, 13, 10, 7, 4]
female = [11, 13, 15, 16, 14, 11, 8, 6]

Pirámide de población en matplotlib

Una pirámide de población son dos gráficos de barras horizontales espalda con espalda que comparten el mismo eje de categorías, usados normalmente para comparar dos grupos (como población masculina y femenina) por franjas de edad. Matplotlib no tiene una función específica: dibuja el primer grupo con barh como de costumbre y el segundo con sus valores en negativo, para que las barras crezcan en la dirección contraria.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.barh(age_groups, male)
ax.barh(age_groups, [-f for f in female])

# plt.show()

Pirámide de población en matplotlib

Colores y leyenda

Fija color y label para cada lado, y luego llama a ax.legend como de costumbre.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.barh(age_groups, male, color = "#4C72B0", label = "Hombres")
ax.barh(age_groups, [-f for f in female], color = "#C44E52", label = "Mujeres")
ax.legend()

# plt.show()

Colores de una pirámide de población en matplotlib

Etiquetas del eje en positivo

Como el lado izquierdo usa valores negativos, las etiquetas del eje por defecto mostrarán números negativos. Arréglalo con un formateador personalizado que muestre el valor absoluto.

import matplotlib.ticker as ticker
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.barh(age_groups, male, color = "#4C72B0", label = "Hombres")
ax.barh(age_groups, [-f for f in female], color = "#C44E52", label = "Mujeres")
ax.legend()

ax.xaxis.set_major_formatter(ticker.FuncFormatter(lambda x, pos: f"{abs(int(x))}"))

# plt.show()

Etiquetas del eje en positivo de una pirámide de población en matplotlib

Grosor de las barras

Controla el grosor de las barras igual que en un gráfico de barras normal, con el argumento height.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.barh(age_groups, male, height = 0.6, color = "#4C72B0", label = "Hombres")
ax.barh(age_groups, [-f for f in female], height = 0.6, color = "#C44E52", label = "Mujeres")
ax.legend()

# plt.show()

Grosor de las barras de una pirámide de población en matplotlib

Better Data Visualizations

A Guide for Scholars, Researchers, and Wonks

Comprar en Amazon
Storytelling con Datos

Visualización de datos para profesionales

Comprar en Amazon

También te puede interesar