코딩하는 해맑은 거북이

[데이터시각화] Matplotlib 본문

Data Analysis & Viz

[데이터시각화] Matplotlib

#CJE 2023. 3. 21.
본 게시물의 내용은 '부스트캠프 AI Tech - Data Visualization(안수빈)' 강의를 듣고 작성하였다.
해당 글은 아래의 내용을 다룬다.
🍀 Matplotlib
  🟡 import Library
  🟡 기본 plot
  🟡 Plot의 요소

 

🍀 Matplotlib

- Python에서 사용할 수 있는 시각화 라이브러리

- numpy와 scipy를 베이스로 하여 다양한 라이브러리와 호환성이 좋다.

  → Scikit-Learn, PyTorch, Tensorflow, Pandas

- 다양한 시각화 방법론을 제공한다.

  → 막대그래프 / 선그래프 / 산점도

 

🟡 import Library

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

 

 

🟡 기본 plot

- matplotlib에서 그리는 시각화는 figure라는 큰 틀에 최소 1개 이상의 서브플롯을 추가해서 만든다.

 

- 여기서 ax라는 서브플롯을 추가해서 시각화해보자!

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

 

- figure 사이즈 조정 : figsize

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

 

 

- figure 색깔 변경 : set_facecolor("black")

이를 통해 figure라는 큰 틀 안에 ax라는 서브플롯이 들어가있는 것을 확인할 수 있다.

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

 

- 2개 이상 그리고 싶을 때 : 위치지정

add_subplot의 파라미터로 위치를 지정해주고, 순서대로 (y축, x축, 순서)를 의미한다. 콤마를 제외하고 쓸 수도 있다.

fig.add_subplot(121) : y축은 1개, x축은 2개로 나누었을때 1번째 위치

fig = plt.figure()
ax = fig.add_subplot(121)   # y축 1, x축 2개로 나눴을 때, 1번째꺼
# ax = fig.add_subplot(1, 2, 1)로 사용가능
ax = fig.add_subplot(122)   # y축 1, x축 2개로 나눴을 때, 2번째꺼
plt.show()

fig = plt.figure()
ax1 = fig.add_subplot(211) 
ax2 = fig.add_subplot(212) 
plt.show()

 

 

- plt로 그래프 그리기 : plot(값)

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

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

plt.plot(x)
plt.show()

fig = plt.figure()

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

fig.add_subplot(211) 
plt.plot(x1) # ax1에 그리기
fig.add_subplot(212) 
plt.plot(x2) # ax2에 그리기
plt.show()

 

 

- 그래프에서 각 개체에 대해 직접적으로 수정하는 객체지향(Object-Oriented) API 로 좀 더 Pythonic하게 구현해보자.

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()

 

- 막대그래프 그리기 : bar(x, height, width=0.8, bottom=None, *, align='center', **kwargs)

fig = plt.figure()

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

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

ax1.bar([1, 2, 3], [1, 2, 3]) 
ax2.bar([1, 2, 3], [3, 2, 1])
plt.show()

 

 

 

 

🟡 Plot의 요소

- 1개의 서브플롯에서 동시에 여러개 그리기

동시에 그래프를 그리게 되면 색상은 자동적으로 구분이 된다.

fig = plt.figure()
ax = fig.add_subplot(111) 
# 3개의 그래프 동시에 그리기
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()

 

 

- 색상을 지정하는 3가지 방법 : color=____

fig = plt.figure()
ax = fig.add_subplot(111) 
# 3개의 그래프 동시에 그리기
ax.plot([1, 1, 1], color='r') # 한 글자로 정하는 색상
ax.plot([2, 2, 2], color='forestgreen') # color name
ax.plot([3, 3, 3], color='#000000') # hex code (BLACK)
plt.show()

 

 

- label을 지정한 후, 범례(legend) 추가

legend() 함수를 호출하지 않고, 라벨만 지정한 상태로 show를 하면 라벨은 보여지지 않음.

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.legend()
plt.show()

 

- 서브플롯의 제목(title) 추가 : set_title(제목)

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())	# set_{}() 형태로 설정한 것은 반대로 get_{}()로 정보를 받아올 수 있음
plt.show()

Basic Plot

 

 

- 큰 틀인 figure의 제목(title) 추가 : suptitle(제목)

fig = plt.figure()
ax1 = fig.add_subplot(1, 2, 1) 
ax2 = fig.add_subplot(1, 2, 2)

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

fig.suptitle('fig')
plt.show()

 

- 축 위치와 라벨 설정하기

x축 기준 : set_xticks(), set_xticklabels()

y축 기준 : set_yticks(), set_yticklabels()

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()

 

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()

 

- 텍스트를 추가하는 방법 2가지

1) text

x, y로 좌표를 지정한 후, s로 추가할 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()

 

 

2) annotate

주석으로 xy에는 지정할 좌표를 text는 추가할 주석을 입력한다.

text와 다른점은 annotate는 화살표를 추가할 수 있다.

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.annotate(text='This is Annotate', xy=(1, 2))

ax.legend()
plt.show()

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.annotate(text='This is Annotate', xy=(1, 2),
           xytext=(1.2, 2.2), 
            arrowprops=dict(facecolor='black'),
           )

ax.legend()
plt.show()

 

'Data Analysis & Viz' 카테고리의 다른 글

[데이터시각화] Text  (0) 2023.03.22
[데이터시각화] Scatter Plot  (0) 2023.03.22
[데이터시각화] Line Plot  (0) 2023.03.22
[데이터시각화] Bar Plot  (0) 2023.03.22
[데이터시각화] 시각화의 요소  (0) 2023.03.21
Comments