[파이썬] 내가보려고 정리하는 파이썬 : Matplotlib

2024. 4. 21. 16:31공부

지난 시간까지는 데이터를 정제하고 가공하는 과정 넘파이와 판다스에 대해 알아보았다. 이번에 정제한 데이터를 표현하기위한 시각화에 대해 알아보겠다. 사람은 대부분의 정보를 시각을 통해서 인식하게 된다. 물론 표와같은 정보도 시각으로 인식할수있지만, 이는 직관적이지않다. 그렇기에 우리는 표를 사용하여, 데이터를 표현하게되는데 여기서는 다양한 그래프의 표현방법과, 데이터에 따른 적절한 그래프 사용법에 대해 알아보겠다. 

 

그렇다면 시각화는 무엇을통해 수행하는가? 물론 판다스에도 기능이 있어 사용할수있지만, 더욱 다양하게 사용하기위해서는 matplotlib의 하위모듈 pyplot이라는 라이브러리를 사용할것이다. pyplot에는 시각화를 위한 핵심함수오 클래스가 정의되어있어 일반적인 상황에서는 pyplot만 사용하여 진행한다.

import matplotlib.pyplot as plt

#pyplot선언

 

우선 pyplot에 적응할겸, 간단한 이차원 평면 그래프를 그려보겠다.

plt.plot([1, 2, 3, 4]) # 그래프를 배열값으로 그린다
plt.xlabel('x label')  # x축의 이름설정
plt.ylabel('y label')  # y축의 이름설정
plt.show()  		   # 그래프를 결과로 출력함

출력결과

위처럼 단순한 코드만으로도 그래프를 아주 간단하게 그려낼수있다. 

 

이번에는 y = x^2에 대한 그래프를 그려보겠다.

x = np.arange(10) # 0부터 9까지의 정수생성

plt.plot(x**2) # x^2 표현
plt.show()

y값은 따로 설정하지않았지만, pyplot에서 인식하고 그려준다.

이처럼 다양에 수식에 대한 시각화 역시 간단하다.

 

또한 하나의 그래프에는 다양한 수식을 한번에 그려넣는것도 가능하다. 아래는 그예제다.

# 3x, (1/3)x^2 + 5, -x^2 -5

x = np.arange(-20, 20) # 그래프들을 그리기위한 x선언 (그래프의 값들은 해당범위내에서만 포함된다.)

y1 = 3 * x
y2 = (1/3) * x ** 2 + 5
y3 = -x ** 2 -5

# x,y좌표 다음값은 색상, 그래프를 그릴선, 각 값들을 표현할 도형을나타낸다.
plt.plot(x, y1, 'g--', x, y2, 'r^-', x, y3, 'b*:')

plt.axis([-30, 30, -30, 30]) #그림을 그릴영역을 제한한다

 

이렇듯 그래프는 하나의 선으로만 그리는것이 아닌, 다양한색상과 형태로 그릴수있어, 구분이 용이하게 생성할수있다.

https://matplotlib.org/cheatsheets/_images/cheatsheets-1.png

이미지에는 다양한 시각화 방법이 기입되어있다. 확인하고싶다면, 한번 찾아보기를 권한다. 

 

pyplot을 사용하면, 넘파이의 주기함수 또한 쉽게 시각화할수있다. 간단한 예제로 사인함수와 코사인 함수에 대해 알아보겠다.

 

x = np.linspace(0, np.pi *2 , 360) 2pi = 360

plt.plot(x, np.sin(x), 'b')
plt.plot(x, np.cos(x), 'r')

plt.show()

주기함수에대한 시각 그래프

 

 

Figure axes

지금까지 알아본 그래프는 하나의 표면에 여러그래프를 표현했다. 이번에는 한번에 여러개의 그래프를 생성하여, 여러개의 그래프를 그려보도록하겠다. 

그래프를 그리기위해서는 우선 공간을 지정해줄필요가있다. 

fig ax = plt.subplots(n,m) # n,m에 행렬값을 지정한다

내부에 값을 넣는만큼의 그래프 공간을 생성한다. 이번에는 2x2의 행렬로 생성해서 그려보도록 하겠다.

 

x = np.random.randn(100)
y = np.random.randn(100)

ax[0, 0].scatter(x,y) # 산점도

x = np.arange(20)
y = np.random.uniform(1, 20, 20)
ax[0, 1].bar(x,y) 	#막대 그래프

x = np.linspace(0,10,100)
y = np.cos(x)
ax[1, 0].plot(x,y) # 곡선그래프

z = np.random.uniform(0,1, (10,10))
ax[1, 1].imshow(z) # 이미지 그래프

plt.show()

여러개의 그래프를 그릴때는 ax의 인덱스값을 기준으로 그래프의 위치를 지정해준다. 

 

이렇듯 pyplot에는 여러가지 그래프 들이 있으며, 자주 사용하는 그래프는 아래와같다.

 

  • scatter(x, y, area(포인트범위), color, alpha)
  • bar(x, y, width(두께) ) : 수직 막대 그래
  • barh(x, y) : bar그래프를 세로로 눕혀서 표현한다
  • pie(data, autopct, color) : autopct : 데이터숫자의 형식을 지정하는 변수, %.3f를 넣을경우 소수점아래 3자리 까지표시
  • imshow(data) : 이미지를 표시함
  • plot(x, y, 'color,line,shape') : 'color,line,shape' : 그래프의 색상 선(점선 실선, 변수마다 표기될 도형) 
  • hist(data, bins(구간수)) : 자료를 구간으로 나 빈도를 나타내는 그래프, 
  • boxplt(data) : 그래프의 최대, 최소, 중간값 사분위수등의 통계량을 그림으로 표현할수있는 그래프                                1사분위 : 하위 25% 2사분위 : 중앙값 3사분위 : 상위 25%

또한 이 그래프가 그려지는 사이즈를 조걸할수있는 기능도 존재한다.

plt.figure()함수의 키워드 인자로 figsize값을 지정해주면, 원하는 사이즈로 지정할수있다. 

plt.figure(figsize = (3.6, 5.0)
# 그래프크기를 4.2, 3.6으로조정
# 이때 주의해야할점은 그래프 값을 조정하는것이아닌, 크기를 조정하는것이므로 실제값은 달라지지 않는다.