🖥️ IT, 컴퓨터/🐍 Python

[Python] matplotlib으로 인구 피라미드 시각화하기

김 홍시 2024. 12. 24.
반응형

 

import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter, MultipleLocator
import pandas as pd

# 남한 인구 데이터
data = {
    "Age_Group": [
        "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+"
    ],
    "Male": [
        -766227, -1097221, -1189663, -1183580, -1620461, -1933726, -1796779,
        -1808706, -2067075, -2061862, -2258061, -2068112, -2042614,
        -1478069, -1012668, -696606, -737256
    ],
    "Female": [
        727814, 1044863, 1122176, 1104293, 1484776, 1695058, 1593655,
        1673805, 1967944, 2000130, 2231491, 2045845, 2105499,
        1585781, 1152098, 899933, 1418722
    ]
}

# DataFrame 생성
df = pd.DataFrame(data)

# 시각화
fig, ax = plt.subplots(figsize=(10, 8))

# 남성 데이터 (왼쪽 방향)
ax.barh(df["Age_Group"], df["Male"], color="blue", label="Male")

# 여성 데이터 (오른쪽 방향)
ax.barh(df["Age_Group"], df["Female"], color="red", label="Female")

# 축 설정
ax.set_xlabel("Population")
ax.set_ylabel("Age Group")
ax.set_title("Population Pyramid of South Korea")
ax.legend()

# x축 범위 설정
max_population = max(abs(df["Male"].min()), df["Female"].max())
ax.set_xlim([-max_population * 1.1, max_population * 1.1])

# x축 숫자 포맷: 천 단위에 콤마 추가
formatter = FuncFormatter(lambda x, _: f'{int(abs(x)):,}')
ax.xaxis.set_major_formatter(formatter)


# x축 눈금 간격 50만 단위로 설정
ax.xaxis.set_major_locator(MultipleLocator(500000))

# 그래프 표시
plt.tight_layout()
plt.show()

 

 

반응형

댓글