matplotlib 07 Polar Chart

Page content

강의 홍보

공지

제 수업을 듣는 사람들이 계속적으로 실습할 수 있도록 강의 파일을 만들었습니다. 늘 도움이 되기를 바라며. 참고했던 교재 및 Reference는 꼭 확인하셔서 교재 구매 또는 관련 Reference를 확인하시기를 바랍니다.

I. Matplotlib & Seaborn

(1) 기본 개요

Matplotlib는 파이썬 표준 시각화 도구라고 불리워지며 파이썬 그래프의 기본 토대가 된다고 해도 무방하다. 객체지향 프로그래밍을 지원하므로 세세하게 꾸밀 수 있다.

Seaborn 그래는 파이썬 시각화 도구의 고급 버전이다. Matplotlib에 비해 비교적 단순한 인터페이스를 제공하기 때문에 초보자도 어렵지 않게 배울 수 있다.

(2) matplotlib & Seabon 설치

설치방법은 윈도우 명령 프롬프트, MacOS, Linux 터미널에서 pip install matplotlib입력하면 되지만, 간혹 여러 환경에 따라 달라질 수 있으니 관련 싸이트에서 확인하기를 바란다.

II. Polar Chart

Polar Chart는 보통 Spider Web Plot이라고 부르기도 한다. 이번에는 간단하게 데이터를 만들어서 그래프를 작성하도록 해보자.

(1) 데이터 생성

  • 주요 과목별 중간고사 점수와 기말고사 점수 데이터를 만들었다고 가정해보자.
import pandas as pd

# 주요 과목
subjects = ["Korean Language", "Math", "Science", "History", "Programming", "English"]

# grades
mid_grades = [95, 90, 92, 85, 70, 80, 95]
final_grades = [75, 90, 80, 75, 86, 93, 75]

# theta
theta = np.linspace(0, 2 * np.pi, len(mid_grades))
print(theta)
[0.         1.04719755 2.0943951  3.14159265 4.1887902  5.23598776
 6.28318531]
  • 위 코드에서 첫번째 값과 마지막 값이 동일한 것을 확인할 수 있다. 이유는 원 그래프를 그릴 때, 선이 이어지도록 해줘야 하기 때문에 polar graph를 작성할 때는 데이터 셋에 주의해야 한다.
  • 우선 np.linspace 값은 축을 작성할 때, 간격 만들기에 사용되는 함수이다.
  • theta 값의 역할은 x축의 역할을 한다. 즉, plt.plot(x, y) 형태로 작성할 때, x값 대신 대응하여 theta값을 입력해주면 된다.

(2) Spider Plot 초기화

첫번째로 해야할 작업은 Spider Plot을 생성하는 것이다. 우선 코드를 확인해보자.

import numpy as np
import matplotlib.pyplot as plt

plt.figure(figsize = (10, 6))
plt.subplot(polar=True)
<matplotlib.axes._subplots.PolarAxesSubplot at 0x7f58477a7cf8>

png

  • Spider Plot 그래프를 그리기 위해서는 plt.subplot()안에 인수 polar=True값을 입력해주면 된다.

(3) 격자 생성

  • 우선 코드를 작성한다.
import numpy as np
import matplotlib.pyplot as plt

plt.figure(figsize = (10, 6))
plt.subplot(polar=True)

(lines, labels) = plt.thetagrids(range(0, 360, int(360/len(subjects))), (subjects))

png

  • 입력값을 변수 두개에 저장하는 코드를 진행한다. (lines, labels)
  • plt.thetagridspolar 그래프 작성에 필요한 theta gridlines을 획득하기 위한 것이다.
(lines, labels) = plt.thetagrids(range(0, 360, int(360/len(subjects))), (subjects))
  • 그래프 특성상, 격자(line)와 함께 lables가 동시에 필요하기 때문에 입력 값을 변수 두 개에 저장하는 형태로 작성하였다.

(4) 방사형 그래프 완성

  • 우선 코드부터 확인한다.
import numpy as np
import matplotlib.pyplot as plt

plt.figure(figsize = (10, 6))
plt.subplot(polar=True)

(lines, labels) = plt.thetagrids(range(0, 360, int(360/len(subjects))), (subjects))

plt.plot(theta, mid_grades)
plt.fill(theta, mid_grades, 'b', alpha=0.2)
plt.plot(theta, final_grades)
plt.legend(labels=('Mid-Term Grades', 'Final-Term Grades'))
plt.title("Mid Vs. Final grades by Subject")
plt.show()

png

  • plot.fill을 작성한 이유는, mid_grades의 영역을 표시하기 위함이다.
  • 'b'는 파란색을 뜻하는 blue를 의미한다.
  • alpha는 투명도를 의미하며 0~1 사이의 값이 온다.

III. 실습파일

  • 구글코랩에서 빠르게 실습도 할 수 있습니다. 실습

IV. Reference

Mukhiya, Uuresh Kumar. Ahmed Usman. Hands-on Exploratory Data Analysis With Python: Perform EDA Techniques to understand, Summarize, and Investigate Your Data. Packt publishing limited, 2020.