파이썬에서 가시화를 위해 보통 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()
마지막으로 참조하면 좋을 링크도 같이 남겨둡니다.
'Programming Language > Python' 카테고리의 다른 글
[Python] 사전(dict)형 정렬하기 (0) | 2021.03.21 |
---|---|
[Python] Albumentations를 이용한 데이터 증강 및 실험 (0) | 2021.03.18 |
[Python] GIL 관련 OS, 컴퓨터구조가 중요한 이유 (0) | 2021.02.18 |
[Python] Multiprocessing으로 속도 개선해보기 (0) | 2021.02.01 |
역세권 청년주택 자동 이메일 알람 설정 (0) | 2021.01.10 |