파이썬 데이터 시각화 : 컨투어 플롯(contour plot, 등고선 플롯)

파이썬 데이터 시각화 : 컨투어 플롯(contour plot, 등고선 플롯)

파이썬 데이터 시각화 도구 중 독립변수가 2개일 때의 함수 값을 시각화 할 수 있는 방법이 3차원 서피스 플롯입니다. 3차원 서피스 플롯에서는 데이터의 전체 형태를 잘 파악할 수 있지만, 독립변수 2개 조합에서 함수값을 읽어내기는 어렵습니다. 이번 포스팅에서는 이 함수값을 쉽게 읽을 수 있는 컨투어 플롯(contour plot, 등고선 플롯)에 대해 알아보겠습니다.


글의 순서

독립변수의 수에 따라 함수관계를 파악하는 방법
카펫 플롯 vs. 컨투어 플롯 : 3차원 데이터를 2차원 평면에 나타내는 방법
파이썬 데이터 시각화 : 컨투어 플롯(contour plot, 등고선 플롯)
파이썬 데이터 시각화 : 컨투어 플롯에 값 표시하기


독립변수의 수에 따라 함수관계를 파악하는 방법

z = f(x,y)는 독립변수 x, y와 종속변수 z와의 함수 관계를 나타냅니다. 중학수학 함수에서 배웠던 것은 y=f(x)의 형태였고, 독립변수 x와 종속변수 y의 함수 관계를 나타냅니다. 이 두 함수는 독립변수의 개수에 차이가 있습니다.

독립변수가 1개인 함수 y=f(x)는 2차원 평면에 나타내면 함수관계를 쉽게 파악할 수 있습니다. 그런데, 독립변수가 2개인 함수 z=f(x,y)의 관계를 한 눈에 보기 위해서는 3차원 공간에서 보여줘야 합니다.



카펫 플롯 vs. 컨투어 플롯 : 3차원 데이터를 2차원 평면에 나타내는 방법

지난 포스팅에서 독립변수가 2개인 함수 z=f(x,y)의 관계를 서피스 플롯(surface plot)을 통해 한 눈에 파악할 수 있었습니다. 그런데, 서피스 플롯으로는 독립변수 x, y의 조합에 따른 함수값 z을 파악하기가 쉽지 않습니다.

함수 관계의 형태가 아니라 함수값을 찾는 데 유용한 도구 중 하나가 카펫 플롯(Carpet Plot)입니다. 카펫 플롯은 3차원 데이터를 2차원 평면에 나타내는 방식 중 하나로, 특히 공학 분야에서 유용하게 사용됩니다. 안타깝게도 카펫 플롯을 matplotlib 패키지로는 그릴 수 없습니다. 대신 컨투어 플롯(Contour Plot)을 이용하여 유사한 효과를 낼 수 있습니다. 여기서는 x, y축을 사용하고, z 값을 컨투어 레벨(등고선 높이)로 나타내어 카펫 플롯과 유사한 시각화를 해보겠습니다.


파이썬 데이터 시각화 : 컨투어 플롯(contour plot, 등고선 플롯)

파이썬 데이터 시각화를 위해 contour plot 그리는 방법을 실습코드01에 나타내었습니다. 실습코드01에서 사용하고 있는 방법은 2D 그리드 형식으로 x, y, z 값 구성한 후, matplotlib의 plt.contourf 함수로 컨투어 플롯을 그립니다. 이 시각화 절차를 3단계로 정리하면 다음과 같습니다.

(1) meshgrid : 데이터에서 x, y 값 중 유일한 값들을 이용하여 그리드 만들기
(2) pivot : 그리드에 맞게 z 값 재배열
(3) contourf 또는 contour : 컨투어 플롯 그리기

실습코드01을 살펴보겠습니다. 파이썬으로 3차원 surface plot을 그리기 위해서는 기본적으로 matplotlib, pandas, numpy 라이브러리가 필요합니다. 먼저 데이터를 pandas.DataFrame으로 변환하고, numpy.meshgrid를 이용해 x, y 축에 대한 그리드를 생성합니다. 그 후, pandas.pivot 함수로 z 값들을 x, y 축의 그리드에 맞게 재배열하고, matplotlib의 contourf 함수로 컨투어 플롯을 생성합니다. 이렇게 생성된 컨투어 플롯은 데이터의 3차원 구조를 색상 변화를 통해 2차원 평면에 표현합니다. mabplotlib 패키지의 contourf를 사용하면 실습코드01 결과처럼 등고선도의 색깔을 채워줍니다. 색을 채울 필요가 없다면 contourf 대신 countour 함수를 사용하면 됩니다.

실습코드01을 실행시키면, 데이터프레임 변수 data가 아래처럼 출력됩니다. 그 후 서피스 플롯이 C:/_python/pandas/visual/surface/에 그림파일로 저장되며, Figure 1이라는 창이 뜨면서 아래처럼 눈으로 확인할 수도 있습니다.

파이썬 데이터 시각화 : 서피스 플롯


파이썬 데이터 시각화 : 컨투어 플롯에 값 표시하기

각 등고선별로 값을 표시하면 훨씬 더 데이터 파악하기 쉬워집니다. 실습코드02는 컨투어 플롯의 각 등고선에 값을 표시해주는 코드입니다. 실습코드01과 차이 나는 부분은 26번째 줄에서 29번째 줄까지이며, 각각의 의미를 정리해보겠습니다.

line 26) plt.contour 함수를 사용해 컨투어 라인을 생성, colors = ‘k’에서 k는 검은색
line 27) plt.clabel 함수로 각 컨투어 라인에 해당하는 z 값들을 표시. fontsize로 글자 크기를, fmt로 숫자 표시 형식을 지정함
line 28) shrink = 1.0과 같이 shrink 값을 지정해서 컬러바의 크기를 조정할 수 있음. shrink=0.5로 지정한다면 컬러바 크기가 반으로 줄어듦
line 29) 독립변수 값을 명확하게 확인하기 위하여 컨투어 플롯에 그리드를 넣어줌. 이때, 색깔, 줄 스타일(실선, 점선 등), 줄의 두께를 지정해 줄 수 있음.

코드 실행 결과를 실습코드02 아래에 나타내었습니다.

실습코드02을 실행시키면, 데이터프레임 변수 data가 위의 실습코드01 실행결과처럼 출력됩니다. 그 후 서피스 플롯이 C:/_python/pandas/visual/surface/에 그림파일로 저장되며, Figure 1이라는 창이 뜨면서 아래처럼 눈으로 확인할 수 있습니다.

파이썬 데이터 시각화 : 컨투어 플롯 + 값 표시


마치며 …

이번 포스팅에서는 파이썬 데이터 시각화 도구 중 독립변수 2개일 때 함수 값을 시각화 할 수 있는 3차원 그래프(서피스 플롯) 작성 방법을 정리해보았습니다. 서피스 플롯은 3개 변수의 상태를 동시에 확인 할 수 있다는 점에서 데이터를 시각화하는데 유용합니다. 서피스 플롯을 그리는 방법인 아래의 3단계를 기억해 주시기 바랍니다.

(1) meshgrid : 데이터에서 x, y 값 중 유일한 값들을 이용하여 그리드 만들기
(2) pivot : 그리드에 맞게 z 값 재배열
(3) plot_surface : 서피스 플롯 그리기

 

 

함께 참고하면 좋은 글 :
파이썬 데이터 시각화 : z=f(x,y), 서피스 플롯, 컨투어 플롯
파이썬 데이터 시각화 : 3차원 서피스 플롯(surface plot)
머신러닝 수학 : 인공지능은 함수
파이썬 판다스로 엑셀 파일의 원하는 부분 골라 읽기
파이썬 판다스로 텍스트 파일 읽기 : read_table()
파이썬 데이터 시각화 : 막대 그래프 작성 2가지 방법(maplotlib.pyplot 활용)
시계열 데이터 가시화 (4) 2개 y축 그래프로 코인 가격 비교
파이썬 데이터 분석 : 판다스 인덱스
판다스 데이터프레임으로 빠르게 데이터 파악하기
파이썬 판다스 데이터 분석 : pivot, 엑셀 입력, 출력


참고자료

matplotlib, 3D plotting

Leave a Comment