쥬피터에서 데이터를 시각화 하는 일반적인 방법을 정리해보려고 한다.
1편은 matplotlib 을 다루는 것으로, 이후에 pandas, seaborn 등으로 다루기 전에, 가장 기초와 기본이 되는 상식이라 할 수 있다.
기본 형태
일반적인 matplotlib 방식을 따른다.
matploblib 를 사용하던 사람에겐 가장 친숙한 형태이고,
처음하는 사람들한테는, 가장 1차원적이고 직관적인 방법이다.
일단 기본적인 꼴은 다음과 같다.
import matplotlib.pyplot as plt
# figure, 즉 그래프를 표현할 액자를 먼저 만든다.
plt.figure()
# figure 를 출력한다.
plt.show()
<Figure size 640x480 with 0 Axes>
여기에 이제 데이터를 추가해 그래프를 그려보자.
선 그래프
plt.figure()
# (1,1), (2,2), (3,3) 의 데이터를 넣어서 그린다.
plt.plot([1,2,3], [1,2,3])
plt.show()
plt.plot([x축 데이터], [y축 데이터])
의 꼴로 사용할 수 있다.
x축 데이터
,y축 데이터
는 list 다.- 각 x좌표의 y지점에 점을 찍어 연결한 그래프다.
- 기본적으로 '선 그래프'로 그려진다.
찍은 점을 표현하고 싶으면 다음과 같이 marker
인자를 추가해주면 된다.
plt.figure()
# marker 인자를 같이 적는다.
plt.plot([1,2,3], [1,2,3], marker='o')
plt.show()
점의 모양은 다양하게 줄 수 있는데, 종류와 사용법은 다음 링크를 참고하면 된다.
스케터 그래프
plt.scatter([x축 데이터], [y축 데이터])
를 사용한다.
plt.figure()
# (1,1), (2,2), (3,3) 에 점을 찍은 그래프를 그린다.
plt.scatter([1,2,3], [1,2,3])
plt.show()
막대 그래프
막대 그래프를 그리고 싶으면, plt.bar([x축 데이터], [y축 데이터])
를 사용하면 된다.
plt.figure()
# 각 x축 데이터 지점에 y축 데이터의 길이의 막대를 그린다.
plt.bar([1,2,3], [1,2,3])
plt.show()
파이 그래프를 그리고 싶으면, plt.pie([비율 데이터])
를 사용하면 된다.
파이 그래프
plt.figure()
# 데이터 비율이 1:2:3 인 파이 그래프를 그린다.
plt.pie([1,2,3])
plt.show()
여러개의 그래프 그리기
한 번에 여러개의 그래프를 그리려면 plt.subplots(행, 열)
를 이용하면 된다.plt.subplots(행, 열)
은 2개의 변수를 반환하는데,
하나는 전체 액자 figure
에 대한 변수고,
다른 하나는 액자 내 여러개의 액자에 대한 리스트 axs
다.
fig, ax = plt.subplots(1, 3)
plt.show()
각 액자에 그래프를 그리려면 다음과 같이 plt.plot()
이 아니라, ax[i].plot()
을 사용하면 된다.ax
는 리스트로, ax[0]
, ax[1]
.. 에 각 액자를 하나씩 담고있다.
# 1행 3열로 액자들을 그린다.
fig, ax = plt.subplots(1, 3)
# 각 액자들에 그래프를 그린다.
ax[0].plot([1,2,3],[1,2,3], )
ax[1].bar([1,2,3],[1,2,3])
ax[2].pie([1,2,3])
plt.show()
좀 더 신경써서 그려보기
이제 대충 어떤식으로 그래프를 그리면 될지 알 수 있게 되었다.
이번에는, 조금 더 세세한 부분까지 신경써서 그래프를 다루는 법을 배워보자.
그래프 크기 변경
그래프 크기를 변경하려면, plt.figure()
안에 figsize=(가로 길이, 세로 길이)
인자를 넣어주면 된다.
# 가로 20, 세로 10인 액자를 만듬.
plt.figure(figsize=(20, 5))
plt.plot([1,2,3], [1,2,3], marker='o')
plt.show()
여러개의 그래프를 그릴 때도 마찬가지로, figsize
를 추가해주면 된다.
# 가로20, 세로10인 큰 액자 안에, 1행 3열로 액자들을 그린다.
fig, ax = plt.subplots(1, 3, figsize=(20, 5))
# 각 액자들에 그래프를 그린다.
ax[0].plot([1,2,3],[1,2,3], )
ax[1].bar([1,2,3],[1,2,3])
ax[2].pie([1,2,3])
plt.show()
그래프 칼라 변경
plt.plot()
안에 color
인자를 추가해준다.
plt.figure()
# red 색상으로 그래프를 그림
plt.plot([1,2,3], [1,2,3], color='red')
plt.show()
color
인자의 값은 다음과 같은 방식으로 줄 수 있다.
fig, ax = plt.subplots(1, 4, figsize=(20, 5))
# 각 액자들에 그래프를 그린다.
ax[0].plot([1,2,3], [1,2,3], color='C0') # matplotlib 에 정의된 색상을 써도 된다.
ax[1].plot([1,2,3], [1,2,3], color='r') # 'red' 대신 'r'만 써도 된다.
ax[2].plot([1,2,3], [1,2,3], color='#aa1f3c') # 16진수 표기법도 가능하다.
ax[3].plot([1,2,3], [1,2,3], color=(0.5, 0.2, 0.1)) # 0~1로 정규화된 rgb 값도 가능하다.
plt.show()
제목, 축 이름 붙이기
방법1. plt 에 직접 설정
그래프 제목은 plt.title()
각 축 이름은 plt.xlabel()
, plt.ylabel()
을 사용하면 된다.
plt.figure()
plt.plot([1,2,3], [1,2,3])
plt.title("제목")
plt.xlabel("x축 이름")
plt.ylabel("y축 이름")
plt.show()
한글을 쓰면 위와 같이 폰트가 깨지는데, 한글을 지원하는 폰트를 전역적으로 다음과 같이 설정해야 한다.
plt.rcParams["font.family"] = u'AppleGothic'
이제 다시 그리면, 다음과 같이 잘 뜬다.
plt.figure()
plt.plot([1,2,3], [1,2,3])
plt.title("제목")
plt.xlabel("x축 이름")
plt.ylabel("y축 이름")
plt.show()
방법2. ax에 설정
시각화 코드들을 보다보면, plt.figure()
을 사용하지 않고, 주로 plt.subplots()
을 사용하는 경우가 많은데, 이 때 ax
를 이용하여 설정할 수 있다.
fig, ax = plt.subplots(1, 1)
ax.plot([1,2,3], [1,2,3])
ax.set_title("제목")
ax.set_xlabel("x축 이름")
ax.set_ylabel("y축 이름")
plt.show()
다음과 같이 여러개의 그래프에 각각 설정할 수도 있다.
fig, ax = plt.subplots(1, 2, figsize=(20, 5))
# 0번 그래프
ax[0].plot([1,2,3], [1,2,3], color='C0')
ax[0].set_title("0번 제목")
ax[0].set_xlabel("0번 x축 이름")
ax[0].set_ylabel("0번 y축 이름")
# 1번 그래프
ax[1].plot([1,2,3], [1,2,3], color='C1')
ax[1].set_title("1번 제목")
ax[1].set_xlabel("1번 x축 이름")
ax[1].set_ylabel("1번 y축 이름")
plt.show()
x축, y축 단위와 범위 바꾸기
이전과 같이 그래프를 '그냥' 그리면, 각 데이터를 파악해서 plt.plot 이 '알아서' 이쁘게 그려준다.
이 과정 중에, 각 축의 단위와 범위도 자연스럽게 자동으로 설정되는데, 이를 좀 더 커스터마이징 해보자.
축 단위 바꾸기
plt.xticks([단위 리스트])
를 사용하면 x축 단위를 수동으로 바꿀 수 있다.
y축도 마찬가지다.
plt.figure()
plt.plot([1,2,3], [1,2,3])
plt.xticks([1,2,3]) # x축 단위 바꾸기
plt.yticks([1,2,3]) # y축 단위 바꾸기
plt.show()
단위가, 숫자가 아니라 글자면 다음과 같이 [글자 리스트]를 인자에 추가하면 된다.
plt.figure()
plt.plot([1,2,3], [1,2,3])
plt.xticks([1,2,3], ['월', '화', '수']) # x축 단위 바꾸기
plt.yticks([1,2,3], ['저', '중', '고']) # y축 단위 바꾸기
plt.show()
축 범위 바꾸기
plt.xlim([보여줄 최소값, 보여줄 최대값])
를 사용하면 된다.
y축도 마찬가지다.
plt.figure()
plt.plot([1,2,3], [1,2,3])
plt.xlim([0, 5]) # x축 범위 바꾸기
plt.ylim([0, 10]) # y축 범위 바꾸기
plt.show()
여러 개의 그래프의 경우.
plt.subplots()
로 여러개의 그래프를 한 번에 그리는 경우, 각 그래프에 대한 접근은 모두 ax
를 통해서 하면 된다.
plt.xticks()
는 ax[i].set_yticks()
으로,plt.xlim()
은 ax[i].set_xlim()
로 바꾸면 된다.
다음의 예를 보면 쉽게 이해할 수 있을 것이다.
fig, ax = plt.subplots(1, 2, figsize=(20, 5))
# 0번 그래프
ax[0].plot([1,2,3], [1,2,3])
ax[0].set_xticks([1,2,3])
# 1번 그래프
ax[1].plot([1,2,3], [1,2,3])
ax[1].set_xlim([0, 5])
plt.show()
범례(legend) 표시
범례를 표시하려면, plt.plot
의 인자로 label
을 설정해주고plt.legend()
를 적어주면 된다.
plt.figure()
plt.plot([1,2,3], [1,2,3], label="그래프0")
plt.legend()
plt.show()
마무리
이번 편에서는, 어느정도 '감' 만 잡으면 된다.
더 세세하게 그리기 위해, 각 메쏘드와 함수에 넣는 인자는 엄청나게 많다.
이를 다 외울 것도 아니고, 외울 수도 없다. 그저 쓰다보면 필요한건 외워진다.
'감'을 잡기 위해 가장 기초적인 것만 간략히 설명했다.
사실 구글링 하면 matplotlib에 대해 이 글보다 더 훌륭하게 설명된 페이지가 많다.
더 훌륭한 글들을 읽고 싶다면 다음 링크들을 추천한다.
진짜로 하고싶은, 공유하고 싶은 내용은 다음 편부터다.
이 글에서는 '데이터 시각화' 를 이런 식으로 하는구나 정도로 감을 잡으면, 그게 다다.
'데이터와 함께 탱고를 > 데이터 시각화' 카테고리의 다른 글
이제는 matplotlib 말고, Plotly 를 쓰자. (7) | 2019.08.17 |
---|---|
pandas, bar 그래프(plot) 이쁘게 그리기 (2) | 2019.06.18 |
pyplot 그래프의 범주박스 위치 변경하기 (0) | 2019.06.14 |
folium 의 plugins 패키지 샘플 살펴보기 2 (0) | 2019.06.03 |
folium 의 plugins 패키지 샘플 살펴보기 (7) | 2019.05.25 |