파이썬 대표 시각화 라이브러리인 Matplotlib에서 plt.contour()로 그린 등고선의 실제 좌표값을 추출하는 방법을 소개합니다. 등고선은 내부적으로 Path(경로) 객체로 저장되기 때문에, 각 경로가 가진 정점(vertex) 정보만 확인하면 해당 등고선을 이루는 x, y 좌표를 모두 얻을 수 있습니다.
좌표 추출 단계
figure.figsize로 그림(figure) 크기를 지정하고,figure.autolayout으로 서브플롯 사이와 주변의 여백을 자동 조정합니다.- x, y 데이터 포인트와 각 격자 위치의 값 m으로 구성된 리스트를 준비합니다.
plt.contour(x, y, m)을 호출하여 등고선 플롯을 생성합니다.- 반환된 등고선 객체(cs)의 컬렉션(Collections) 인스턴스에 접근합니다.
- 각 컬렉션이 보유한 경로(Path)를 순회하면서 정점 배열(vertices)에서 x, y 좌표를 꺼내 출력합니다.
plt.show()메서드로 결과 그림을 화면에 표시합니다.
예제 코드
import matplotlib.pyplot as plt
# 그림 크기와 레이아웃 설정
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
# 데이터 준비
x = [1, 2, 3, 4]
y = [1, 2, 3, 4]
m = [[15, 14, 13, 12],
[14, 12, 10, 8],
[13, 10, 7, 4],
[12, 8, 4, 0]]
# 등고선 플롯 생성
cs = plt.contour(x, y, m)
# 컬렉션을 순회하며 등고선 좌표 출력
for item in cs.collections:
for i in item.get_paths():
v = i.vertices
x = v[:, 0]
y = v[:, 1]
print(x, y)
plt.show()실행 결과
위 코드를 실행하면 다음과 같은 등고선 그래프가 화면에 그려집니다.


동시에 터미널에는 각 등고선을 구성하는 정점들의 x, y 좌표가 레벨별로 순차적으로 출력됩니다.
[4.] [4.] [4. 3.5] [3.5 4. ] [4. 3.] [3. 4.] [4. 3.33333333 3. 2.5 ] [2.5 3. 3.33333333 4. ] [4. 3. 2.66666667 2. ] [2. 2.66666667 3. 4. ] [4. 3. 2. 1.5] [1.5 2. 3. 4. ] [4. 3. 2. 1.33333333 1. ] [1. 1.33333333 2. 3. 4. ] [2. 1.] [1. 2.]
참고: Matplotlib 3.8 이상 버전 사용자라면
cs.collections 속성은 Matplotlib 3.8부터 폐기(deprecated)되었으며, 3.10 버전부터는 완전히 제거되었습니다. 최신 버전에서는 아래와 같이 cs.get_paths() 또는 cs.allsegs를 사용하는 것을 권장합니다.
# 방법 1: get_paths() 사용
for path in cs.get_paths():
v = path.vertices
print(v[:, 0], v[:, 1])
# 방법 2: allsegs 사용 (레벨별 세그먼트 접근)
for level_segs in cs.allsegs:
for seg in level_segs:
print(seg[:, 0], seg[:, 1])마무리
이렇게 등고선의 정점 좌표를 직접 추출하면 특정 값의 등고선이 지나가는 위치를 후속 계산에 활용하거나, 원하는 형식으로 데이터를 재가공할 수 있습니다. 시각화 자동화나 지리·과학 데이터 분석 작업에서 매우 유용하게 쓸 수 있는 기법이니 활용해 보시기 바랍니다.