본문 바로가기

언어/Python

[Python] Python(파이썬) Matplotlib

Matplotlib이란?

2D 차트 이미지를 생성해주는 라이브러리이다. 출판에도 사용할 수 있는 고품질의 이미지를 생성하며 파이썬에서 시각화를 한다면 주로 Matplotlib을 사용한다.

Matplotlib의 구조

하나의 Figure에 다수의 Axes이 존재한다. Axes는 사용자가 설정하기 나름이다.

시작하기 전 초기화

# 기본 초기화 코드 설정

# import 설정
%matplotlib inline
from matplotlib import pyplot as plt
import pandas as pd
import seaborn as sns

# matplotlib에 필요한 파라미터 설정 코드
plt.rcParams['axes.unicode_minus'] = False # 시각화 이미지에서 음수 표현을 위한 설정
plt.rcParams['font.family'] = 'Malgun Gothic' # 시각화 이미지의 기본 폰트를 맑은 고딕으로 설정

from tqdm import tqdm_notebook

Figure 크기 지정

%matplotlib inline
from matplotlib import pyplot as plt

x = [1, 2, 3, 4]
y = [4, 6, 8, 12]

# Figure 사이즈 지정
plt.figure(figsize=(10, 5)) # 사이즈 지정
plt.plot(x, y) # 그래프 그리기

그래프 결과를 쥬피터 노트북에서 보여줄 수 있도록 쥬피터 노트북의 magic command인 matplob inline을 사용하고 pyplot은 통상적으로 plt로 지정한다.

예제 코드와 같이 plot 함수 사용 전에 figure 함수를 사용하여 figure에 대한 속성을 미리 정의할 수 있다. 예제 코드에서는 figure size를 튜플 타입을 사용하여 지정하였다. 주의할 점은 사이즈를 너무 크게 잡으면 x축, y축의 글자가 작게 보이고 그래프 생성 시간도 오래 걸린다. 따라서 적절하게 크기를 지정하는 것이 필요하다.

Figure 꾸미기

%matplotlib inline
from matplotlib import pyplot as plt

x = [1, 2, 3, 4]
y = [4, 6, 8, 12]

# Figure 사이즈 지정
plt.figure(figsize=(10, 5)) # 사이즈 지정
plt.plot(x, y) # 그래프 그리기

# Figure 꾸미기
plt.title("제목") # 제목 지정
plt.xlabel("X축") # X축 지정
plt.ylabel("Y축") # Y축 지정
plt.grid() # grid 넣기

import한 pyplot의 title, xlabel, ylabel, grid를 통해 시각화하는 figure를 꾸밀 수 있다.

 

Figure 한글 폰트 설정

plt.rc('axes', unicode_minus=False)
plt.rc('font', family='Malgun Gothic')

이미 위의 초기화 설정에서 한글 폰트를 설정하였다. 그리고 예제 코드와 같이 설정할 수도 있다.

 

# 사용할 수 있는 폰트 목록
import os
import pandas as pd
from matplotlib.font_manager import fontManager

font_list = []
for font in fontManager.ttflist:
    font_list.append({
        'name':font.name, # 폰트의 이름(font family 지정 이름)
        'file_name':os.path.basename(font.fname), # 폰트의 실제 경로
        'style':font.style, # 폰트의 스타일
    })

df = pd.DataFrame(font_list).set_index('name')
print(df.shape) # 행과 열 출력
df.head() # 상위 5개 행 출력

'맑은 고딕' 이외에 어떤 폰트를 사용할 수 있는지 pandas를 통해 확인할 수 있다. 출력을 위해서는 사전 타입으로 지정하면 편리하다.

 

df.loc['Malgun Gothic']

현재 사용하는 시스템에 설치된 '맑은 고딕' 폰트의 개수를 확인할 수 있다.

 

for name in df.index:
    print(name)

폰트의 이름만 별도로 확인하고자 하면 위의 예제 코드를 사용하여 for문을 통해 출력할 수 있다.

스타일 시트 지정

# 기본 초기화 코드 설정

# import 설정
%matplotlib inline
from matplotlib import pyplot as plt
import pandas as pd
import seaborn as sns

# matplotlib에 필요한 파라미터 설정 코드
plt.rcParams['axes.unicode_minus'] = False # 시각화 이미지에서 음수 표현을 위한 설정
plt.rcParams['font.family'] = 'Malgun Gothic' # 시각화 이미지의 기본 폰트를 맑은 고딕으로 설정

# 스타일 시트 지정
plt.style.use('fast') # seaborn-pastel, ggplot, seaborn-darkgrid,fast

from tqdm import tqdm_notebook
from libs import stock_daum, stock_naver

matplotlib에서는 style.use 함수를 사용하여 matplotlib에서 기본으로 설정해놓은 스타일 시트를 사용할 수 있다. 그리고 스타일 시트 지정은 상단에 지정하는 것이 좋다. 그리고 다양한 스타일 시트가 존재하기 때문에 필요한 시트를 찾아 사용하면 좋다.

Pandas를 활용하여 matplotlib 차트 생성

x = [1, 2, 3, 4]
y = [4, 6, 8, 12]

df = pd.DataFrame(y, index=x)
ax = df.plot(title="제목", figsize=(10, 5), grid=True)
ax.set_xlabel("X축")
ax.set_ylabel("Y축")

예제 코드와 같이 pandas를 사용하여 y값을 넘겨주고 index로 x값을 지정하여 dataframe을 생성한다. 그리고 plot 함수를 사용하여 figure의 제목과 크기, grid 설정 여부를 모두 지정할 수 있다. 또한 X축 및 Y축의 이름 설정도 set_xlabel과 set_ylabel 함수를 활용하여 가능하다. 하나의 Figure 안에 다수의 axes를 넣을 수 있지만 위의 예제 코드는 하나의 axes만 존재한다.

보통 데이터 분석을 할 때 pandas를 주로 사용하기 때문에 pandas에서 지원해주는 plot 함수를 사용하는 것이 보다 간결하게 그래프를 그릴 수 있다.

결론

matplotlib은 수 많은 종류의 시각화 차트를 생성 및 제공하는데 유용하다. 하지만 실제 데이터 분석에는 pandas를 많이 사용하기 때문에 matplotlib만 사용하는 것은 비효율적이다. 따라서 pandas의 plot 함수를 함께 사용하는 것이 보다 간결하고 효율이 좋다.