PART 03 / CHAPTER 09
09 · Matplotlib·단계구분도·히트맵
지도 색이 나타내는 분모와 범례를 설명하고 SVG 지도를 저장합니다.
이 페이지에서
학습 목표: 지도 색이 나타내는 분모와 범례를 설명하고 SVG 지도를 저장합니다.
준비: 실행 환경 · 도구와 용어. 예제 자료는 별도 표시가 없는 한 합성 자료입니다.
개념
Matplotlib은 Python에서 그래프와 지도를 그리는 시각화 라이브러리입니다. GeoPandas의 plot()은 이를 이용해 도형을 그립니다. 단계구분도(choropleth)는 행정구역이나 필지 같은 구역의 값을 색으로 표현합니다. 히트맵은 문맥에 따라 격자 값의 색상 표현 또는 점 주변을 부드럽게 확산시킨 밀도 표현을 뜻합니다.
점 밀도 히트맵의 진한 색은 반드시 많은 인구나 높은 위험을 뜻하지 않습니다. 입력 점의 수, 가중치, 반경, 축척이 결과에 영향을 줍니다.
왜 필요한가
큰 공원에 나무가 많다는 사실과 단위 면적당 나무가 조밀하다는 사실은 다릅니다. 조경 설계 비교에서는 총량과 밀도를 구분해 표현해야 합니다.
핵심 API
gdf.plot(column=..., legend=True, ax=ax)로 속성 지도를 만듭니다. ax.set_aspect('equal')로 축척을 유지하고 fig.savefig(..., format='svg')로 확대 가능한 그림을 저장합니다.
최소 실행 예제
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import geopandas as gpd
from shapely.geometry import box
zones = gpd.GeoDataFrame(
{"trees": [10, 20]},
geometry=[box(0, 0, 100, 100), box(120, 0, 320, 100)], crs=5179
)
zones["trees_per_ha"] = zones["trees"] / (zones.area / 10000)
fig, ax = plt.subplots(figsize=(7, 3))
zones.plot(column="trees_per_ha", legend=True, vmin=0, vmax=20,
cmap="YlGn", edgecolor="black", ax=ax)
ax.set_aspect("equal")
ax.set_title("Synthetic tree density (trees/ha)")
fig.savefig("density.svg", bbox_inches="tight")
plt.close(fig)
assert zones["trees_per_ha"].tolist() == [10, 10]
print("density.svg")
조경·도시 실무 예제
1ha에 10그루인 구역과 2ha에 20그루인 구역의 밀도는 같습니다. 위 SVG는 합성 자료입니다. 실제 녹지 비교에서는 조사 시점, 수목의 정의, 조사 누락 범위를 범례와 함께 적습니다.
시각화와 결과 읽기
양의 밀도에는 순차형 색상, 평균 대비 편차에는 발산형 색상을 사용하세요. 결측값은 0과 다른 색으로 표시하고, 여러 지도를 비교할 때 같은 범례 범위를 유지합니다.
흔한 오류
지도마다 자동 최솟값·최댓값을 쓰면 같은 색이 다른 값을 뜻할 수 있습니다. 밀도 분모가 0인 구역은 별도로 처리하세요. 색만으로 정보를 전달하지 말고 표나 수치 설명을 함께 둡니다.
연습문제
각 구역의 총 나무 수 지도와 밀도 지도를 각각 만들고 색상 차이를 설명하세요.
전체 예제 내려받기 · 실행: python chapter09.py
다음 단계
10 · Folium으로 인터랙티브 지도 만들기로 이어집니다.
출처
GeoPandas 지도, Matplotlib 저장. 확인 2026-09-30.
