꺼내먹는지식 준

Matplotlib 기본 본문

CS/데이터시각화

Matplotlib 기본

알 수 없는 사용자 2022. 2. 3. 12:38

Matplotlib 은 필요할 때 그때 그때 찾아 사용하다 보니 매번 익숙해지지 못하고, 많은 시간이 소요되었다. 

이 시간을 통해 Matplotlib 을 잡고가자. 

 

본 게시글은 기본 개념, 전체적인 그림을 그리는 게시글이다. 

 

Python에서 활발하게 사용되는 시각화 라이브러리 

대부분의 시각화, 데이터 분석, 머신러닝 딥러닝은 python에서 이루지기에, 습득이 필수 

numpy와 scipy를 베이스로 하여 여러 라이브러리와 호환성이 높다. 

 

여러 시각화 방법론 제공 

1) 막대 그래프 

2) 선 그래프 
3) 산점도

4) ETC 

그 외에도 Seaborn, Plotly, Bokeh, Altair 등의 라이브러리 존재 

그러나 Matplotlib의 범용성이 제일 럽고, base가 된다. 

 

import numpy as np 
import matplotlib as mpl 
import matplotlib.pyplot as plt

#mpl.__version__ 3.3.4 버전 이상으로 활용

 

matplotlib 에서 그리는 시각화는 Figure이라는 큰 틀에 Ax 라는 sub plot 이 추가되어져 생성된다. 

 

fig = plt.figure()
plt.show()

plt.show(): figure 에 그려진 그림을 그려라

 

fig = plt.figure()
ax = fig.add_subplot()
plt.show()

Default 사이즈 figure 생성 

fig = plt.figure(figsize = (12, 7))
ax = fig.add_subplot()
plt.show()

크기 비율 조정이 가능하다.

fig.set_facecolor('black')

위 코드에 해당 줄을 추가하면, 다음과 같이 나타난다. 

 

서브 플랏 사용법

fig = plt.figure()
ax = fig.add_subplot(121)
#ax = fig.add_subplot(122)

plt.show()

# 세로로 1개, 가로로 2개로 나누고, 그 중 가로 첫번째에 후가.

주석을 해제하면 2번째 칸에도 그려진 것을 확인할 수 있다. 

x = np.array([1, 2, 3]) 

plt.plot() : 선 그리기 

 

x1 = [1,2,3]

x2 = [3,2,1]


ax1= fig.add_subplot(211)
plt.plot(x)

ax2 = fig.add_subplot(212)

plt.plot(x2)

plt.show()

python API : 순차적 방법 

객체지향: 그래프에서 각 객체에 대해 직접적으로 수정하는 방법 

커스텀은 객체지향이 추천됨. 

 

fig = plt.figure()

x1= [1,2,3]
x2 = [3,2,1]

ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212)

ax1.plot(x1)
ax2.plot(x2)
plt.show()

 

객체지향 방식도 위와 동일하게 동작 

plt 로 그리다가, plt.gct().get_axes() 로 다시 서브플롯 객체를 받아서 사용할 수 있다. 

 

한개의 서브플롯에 여러 개 그리기

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot([1,1,1])
ax.plot([1,2,3])
ax.plot([3,3,3])

plt.show()

미리 지정된 순서 (파랑색, 주황색, 초록색 순서대로 그려진 것을 알 수 있다.)

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot([1,2,3], [1,2,3])
ax.bar([1,2,3], [1,2,3])

plt.show()

ax.bar() 은 바 그래프를 생성한다. 

각 그리는 방식마다 색상이 초기화 되어, 아래 그래프에서 볼 수 있듯이 둘다 파란색으로 나타난다. 

색상 지정 

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot([1,1,1], color = 'r')
ax.plot([2,2,2], color = "forestgreen")
ax.plot([3,3,3], color = "#000000") #hex code 
plt.show()

기본 color 들은 한글자로도 색상 지정이 가능 

혹은 색상의 이름으로도 색상 지정 가능 

그러나, 이 두가지 방법은 일관적이지 않을 뿐더러, 확인이 어렵다. 

가장 직관적이며 연속성 있는 방식은 hex code를 사용하는 것이다. 

텍스트 추가 

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot([1,1,1], label = '1')
ax.plot([2,2,2], label = '2')
ax.plot([3,3,3], label = '3')  
ax.set_title('Basic Plot')
ax.legend()
plt.show()

ax.lengend() 를 추가하지 않으면 시각화가 되지 않는다.

 

테투리나 외부에 시각화가 의미하는 범위를 적어주는 것을 legend(범례)라고 한다. 

title 도 생성되었다. 

fig = plt.figure()

ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)

ax1.set_title('ax1')
ax2.set_title('ax2')

fig.suptitle('fig') #sup : super 
plt.show()

다음과 같이 figure, sub_figure 모두 title을 지정해줄 수 있다. 

 

set으로 지정한 정보들은 get_{}() 의 형태의 메서드로 받아올 수 있다. 

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot([1,1,1], label = '1')
ax.plot([2,2,2], label = '2')
ax.plot([3,3,3], label = '3')  
ax.set_title('Basic Plot')
ax.legend()

print(ax.get_title())
plt.show()

출력 결과: Basic Plot 

 

축은 ticks 와 ticklabels로 구분된다. 

ticks: 축이 적히는 범위, 위치 

ticklabels: 범위에 따른 텍스트 

 

 

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot([1,1,1], label = '1')
ax.plot([2,2,2], label = '2')
ax.plot([3,3,3], label = '3')  
ax.set_title('Basic Plot')
ax.set_xticks([0,1,2])

ax.legend()

plt.show()

하단의 x 축의 정보가 0, 1, 2 로 수정된 것을 볼 수 있다. 

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot([1,1,1], label = '1')
ax.plot([2,2,2], label = '2')
ax.plot([3,3,3], label = '3')  
ax.set_title('Basic Plot')
ax.set_xticks([0,1,2])
ax.set_xticklabels(['zero', 'one', 'two'])

ax.legend()

plt.show()

xticklabels 로 0, 1, 2 를 레이블로 대체한 것을 볼 수 있다. 

 

마지막으로, 원하는 위치에 text를 추가하기이다. 

 

첫번째로는 단순 text 추가이다. 

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot([1,1,1], label = '1')
ax.plot([2,2,2], label = '2')
ax.plot([3,3,3], label = '3')  
ax.set_title('Basic Plot')
ax.set_xticks([0,1,2])
ax.set_xticklabels(['zero', 'one', 'two'])

ax.text(x=1, y=2, s = "This is Text")

ax.legend()

plt.show()

x=1, y=2 위치에 label 이 추가된 것을 볼 수 있다. 

 

fig = plt.figure()
ax = fig.add_subfig(1,1,1)

ax.plot([1,1,1], label = '1')
ax.plot([2,2,2], label = '2')
ax.plot([3,3,3], label = '3')

ax.set_title("Basic Plot")
ax.set_xticks([0,1,2])
ax.set_xticklabels([zero,one,two])

ax.annotate(text = 'This is Annotate', xy = (1,2), xytext = (1.2, 2.2), 
arrowprops = dict(facecolor = 'black'))

ax.legend()
plt.show()

 

각 메서드의 기본 정렬이 다른 것을 알 수 있다. 

제목은 중앙 정렬, text추가는 align이 다르나, 그와 같은 요소들도 수정 가능하다. 

 

추후 게시글들을 통하여 시각화를 좀 더 공부해보자. 

'CS > 데이터시각화' 카테고리의 다른 글

Matplotlib 기본기에서 벗어나는 몇가지 팁  (0) 2022.02.07
Matplotlib Scatter Plot  (0) 2022.02.04
Matplotlib Line Plot  (0) 2022.02.03
Matplotlib Bar Plot  (0) 2022.02.03
데이터 시각화란?  (0) 2022.02.03
Comments