Programming Language/Python

[Python] Matplotlib 사용법

깜태 2020. 12. 15. 14:05
728x90

파이썬에서 가시화를 위해 보통 Matplotlib 라이브러리 내 pyplot 라이브러리를 많이 사용합니다.

개인적으로는 불편함도 없지 않지만 쓰다보니 익숙해져서 그런지 자주 찾는것 같습니다.

 

목차

1. 그래프 그리기

1) 그래프 1개 그려보기

2) 그래프 여러개 그리기

3) 다양한 그래프

 

2. 그래프 시각화 옵션

1) X축, Y축 이름 붙이기

2) X축, Y축 값 변경하기

 

 

numpy는 np로 쓰듯이, pyplot는 plt 명령어를 자주 사용합니다.

import Matplotlib.pyplot as plt

 

1. 그래프 그리기

기본 그래프 1개 그리기

기본적으로 matplotlib에서 plot 기능을 이용할 때는 x의 개수와 y개수가 동일해야 합니다.

그렇지 않으면 오류가 납니다.

그리고 순서가 정해져 있기 때문에 순서가 꼬여있으면 원하는 대로 그래프가 이쁘게 나오지 않습니다.

추가로 data가 실수형이어야 합니다. string 형태면 마찬가지로 이상하게 나올 수도 있습니다

 

x = np.arange(1,100)

y = x * 2

plt.plot(x,y)

plt.show()

그래프 여러개 그리기

1. fig.add_subplot(rows, cols, index) 명령을 통해 figure 객체를 [rows,cols] 로 나누어서
해당하는 index 위치로 표시할 수 있습니다.

첫 번째 코드는 이미지 크기를 13 x 10 인치로 그리겠다는 명령어입니다.

ax1은 그래프를 3x1 행렬로 분할했을 때 1번째 해당하는 위치에 그래프를 할당,

ax2는 3x2 행렬로 분할했을 때 3번째 인덱스에 해당하는 위치에 할당,

ax3은 2x2 행렬로 분할했을 때 4번째 인덱스 위치에 할당하겠다는 의미입니다.

이 말은 인덱스는 [rows,cols] 구성일 때 cols부터 계산해서 올라가게 된다는 것을 의미합니다.

 

이렇게 각 그래프마다 그래프를 그리고 싶다면  위에서 본 것처럼 ax1, ax2, ax3같은 변수를 할당해 데이터를 넣으면
각각의 그래프가 채워지는 모습을 볼 수 있습니다.

 

참고

fig = plt.figure( figsize=(width, height))

figsize=(width, height) 옵션으로 width, height에 맞는 숫자를 넣으면 

인치(Inch)를 기준으로 해당 크기를 갖는 Figure 객체가 생성됩니다.

3번째 Figure size를 보고 계산을 하면 figsize(15, 10) = (1080, 720) 으로 되었으니 1인치가 72px임을 알 수 있습니다. 

 

다양한 그래프 그리기 

matplotlib 에서는 다양한 타입의 그래프를 그릴 수 있습니다.

 

 

2. 그래프 시각화 옵션

1. X축, Y축 이름 붙이기

그래프를 그릴 때 X축이 무엇인지, Y축이 무엇인지 설명이 필요한 경우가 매우 많습니다.

그래프에 label이 필요한 경우는 xlabel, ylabel 을 추가하여 설명을 추가할 수 있습니다.

plt.title('title name')
plt.legend() # 그래프 데이터마다 label을 설정할 경우, label의 이름이 그래프에 표시됩니다
plt.xlabel("X AXIS")
plt.ylabel("Y AXIS")

하지만, 방금 subplot을 이용한 경우는 다음과 같은 명령어를 사용해야합니다.

ax2.set_title('test')
ax2.legend()
ax2.set_xlabel("X AXIS")
ax2.set_ylabel("Y AXIS")

 

 

 

X축, Y축 값 변경하기

그래프에 label 값 변경이 필요한 경우도 있습니다.

예를 들어 1->Yes, 0 -> No 로 표시하여 X축 별로 변화를 보고 싶을 수 있습니다.

X축, Y축의 값을 변경하는 명령어는 xticks, yticks입니다.

주의사항으로는 1:1 매핑을 해줘야하므로 X값의 범주에 따라 하나씩 맞춰줘야 하고, list 형태로 넣어야 합니다.

아래는 사전형을 이용해 Y축을 변경해본 예시입니다. 
(subplot을 이용한 경우는 set_xlabel, set_ylabel 명령어를 사용해야합니다)

import matplotlib.pyplot as plt
import numpy as np

data_length = 100
data = np.random.randint(low=0, high=2, size=data_length)
label = {0: 'no', 1: 'yes'}
plt.yticks(label.keys(), list(label.values()))
plt.title('title name')
plt.xlabel("X AXIS")
plt.ylabel("Y AXIS")

plt.plot([x for x in range(data_length)], data)
plt.show()

 

 

 

마지막으로 참조하면 좋을 링크도 같이 남겨둡니다.

 

[1] matplotlib.org/tutorials/intermediate/gridspec.html

 

Customizing Figure Layouts Using GridSpec and Other Functions — Matplotlib 3.3.3 documentation

Note Click here to download the full example code Customizing Figure Layouts Using GridSpec and Other Functions How to create grid-shaped combinations of axes. subplots()Perhaps the primary function used to create figures and axes. It's also similar to mat

matplotlib.org

[2] nittaku.tistory.com/117

 

16. Matplotlib - figure, subplot-axes/ Plot모양 변형/ 눈금,레이블,범례 / 축의 범위 확인 및 변경

Matplotlib에서는 figure라는 그림단위를 사용하여, 이 안에서 한개 혹은 여러개의 plot을 그리고 관리하도록 지원을 한다. 이 때, figure안에 들어가는 plot하나를 subplot이라 부른다. figure에 알아보기 앞

nittaku.tistory.com

[3] bcho.tistory.com/1201

728x90