본문 바로가기
파이썬 (Python)/Numpy

Python 파이썬 numpy, matplotlib 모듈로 그래프를 손쉽게 그려보자

by ★√★ 2021. 2. 26.

안녕하세요, Davey 입니다. 오늘은 numpy, matplotlib 모듈을 이용하여, 그래프를 만드는 방법을 설명 드릴려고 합니다. 파이썬을 이용하여 검토한 데이터에 대해서 쉽게 파악이 가능하게 그래프화 하는 Tool 입니다.

 

numpy-matplotlib-썸네일
numpy-matplotlib

 

처음에, matplotlib 모듈을 접했을 때 저도 이걸 접했을 때, 좀 신기하기도 하고, 이게 어디서 이용할까 이런 생각도 했는데, 출력하는 값을 보고, 약간의 신뢰성도 점점 싾아 가는 중입니다. 여러가지 Case를 예제로 보여 드리도록 하겠습니다. 

 

 

1. matplotlib 모듈

 

:  Python의 코딩을 통해서, 그래프를 그리기 위해, 필요한 라이브러리 중 하나로서, 손쉽게 그래프를 편집 하고, 결과 값을 도출 할 수 있는 점에서, 사용자들이 편하게 이용할 수 있는 라이브러리 중에 하나 이다. 자세한 사항은 아래 홈페이지 참조 부탁 드립니다. -> https://matplotlib.org/

 

Matplotlib: Python plotting — Matplotlib 3.2.2 documentation

 

matplotlib.org

그럼 기본적인 X, Y 축 그래프를 만들어 보겠습니다. 일단, 라이브러리를 import 하셔야 합니다.

(당연한 애기지만, 그전에, 설치가 되어 있는지 확인 하셔야합니다.)

 

========================================================================

import numpy as np

import matplotlib.pyplot as plt

%matplotlib inline    

# 그래프를 쥬피터 안에서 그릴 수 있는 환경 설정


test01 = np.linspace (0,10,10)                                            # 10개의 숫자를 test01에 Assign 함.

test02 = np.random.randn(10) + test01 * 5 + test01**2

# test01과 관계를 짓기 위해서, 수식을 통해서, 다른 10개의 숫자를 test02에 Assign 함.
 

plt.plot(test01,test02)   # test01 을 X 축, test02를 Y축으로 배정하여, 그래프를 출력함.

========================================================================

 

- 위 코드를 실행 시켜 보면, 아래와 같이 X, Y 축의 그래프가 출력되는 걸 확인 하실 수 있습니다. 

 

 

numpy-matplotlib-코드구현-사진1
numpy-matplotlib-코드구현-사진1

 

- 여기에서, X, Y 축의 Description, plot의 Title을 입력 하려면, 아래 Code를 추가적으로 추가 하시면 됩니다. 

 

========================================================================

plt.xlabel('test01 Result')    # X축 Description

plt.ylabel('test02 Result')    # X축 Description

plt.title ('test01 <-> test02 Verification')  # Title Description

========================================================================

 

 

numpy-matplotlib-코드구현-사진2
numpy-matplotlib-코드구현-사진2

 

- 추가적으로, Plot Line의 색깔을 바꿔 보도록 하겠습니다. (RED로) 아래 코드 삽입 해주시면 됩니다. 

 

========================================================================

plt.plot(test01,test02, 'r') # RED 로 수정 ('r' = RED, 'y' = Yellow)

========================================================================

 

 

numpy-matplotlib-코드구현-사진3
numpy-matplotlib-코드구현-사진3

 

- 그럼 여기에서, 선형태의 그래프가 아닌, 점섬 그래프로 수정해보도록 하겠습니다. 혼선이 올 수가 있으니까, 아래 합친 Code를 보여 드리겠습니다. 

 

========================================================================

 

import numpy as np

import matplotlib.pyplot as plt

%matplotlib inline    

# 그래프를 쥬피터 안에서 그릴 수 있는 환경 설정

 
test01 = np.linspace (0,10,10)

test02 = np.random.randn(10) + test01 * 5 + test01**2

 

#plt.plot(test01,test02)

 
plt.scatter(test01,test02)   # 점선 형태의 그래프로 형태를 수정

 
plt.xlabel('test01 Result')

plt.ylabel('test02 Result')

plt.title ('test01 <-> test02 Verification')

plt.plot(test01,test02, 'r')

 

========================================================================

 

 

numpy-matplotlib-코드구현-사진4
numpy-matplotlib-코드구현-사진4

 

- 위 그래프에, Grid 와 여분을 없애서, 나타내 보겠습니다. 임의의 경계를 Assign 하는 것입니다. 아래 Code를 추가 하시면 됩니다. 

 

========================================================================

plt.grid(True)     # Grid 를 보여줌

plt.xlim(0,20)     # X 축의 경계 제한

plt.ylim(0,200)   # Y 축의 경계 제한

======================================================================== 

 

 

numpy-matplotlib-코드구현-사진5
numpy-matplotlib-코드구현-사진5

 

 

- 선 Style, 두께도 수정이 가능합니다. 다른 Code와 합쳐서, 설명 드리겠습니다.  

 

=============================================================================

# plt.plot(test01, test02, linewidth = 5)   # 선 두께 수정 Code

plt.plot(test01,test02, color = 'red', linestyle = '--', marker = '.', markerfacecolor ="black", markersize =20)

=============================================================================

 

numpy-matplotlib-코드구현-사진6
numpy-matplotlib-코드구현-사진6

 

- 그럼 그래프를 하나만 보여 줄 수 있냐?! 아닙니다. 여러가지 그래프를 한번 에 보여 줄 수 있습니다. 이때 사용하는 함수는, subplot 입니다. 그래프를 나눠서 보여주는 거죠. 여러가지 그래프를 보여 줄 때 유용합니다. 

 

=============================================================================

mport numpy as np

import matplotlib.pyplot as plt

%matplotlib inline    

# 그래프를 쥬피터 안에서 그릴 수 있는 환경 설정
 
test01 = np.linspace (0,10,10)

test02 = np.random.randn(10) + test01 * 5 + test01**2

plt.subplot(1,2,1)

plt.plot(test01,test02,'r')

plt.subplot(2,2,2)

plt.plot(test01,np.exp(test02),'k')

=============================================================================

 

 

numpy-matplotlib-코드구현-사진7
numpy-matplotlib-코드구현-사진7

 

 

- 위 그래프를 보시면, 여분이 약간 보기 싫은 걸 발견 하셨을 겁니다. 이 여분을 한번, 제거 해보겠습니다.

 

=============================================================================

plt.rcParams['axes.xmargin'] = 0   # X 축의 여유분은 0으로 한다.

plt.rcParams['axes.ymargin'] = 0   # Y 축의 여유분은 0으로 한다.

plt.plot(test01,test02,'r')

=============================================================================

 

 

numpy-matplotlib-코드구현-사진8
numpy-matplotlib-코드구현-사진8

 

- 마지막으로 막대 그래프 출력하는 함수 설명 드리겠습니다. 위에 제가 설명 드린 것은, 다 선 그래프인데, 아래 Code를 이용하면, 막대 그래프를 통해서, 결과 도출이 가능합니다. 

 

=============================================================================

import numpy as np

import matplotlib.pyplot as plt

%matplotlib inline    

# 그래프를 쥬피터 안에서 그릴 수 있는 환경 설정

test03 = np.random.randint(1,100, size = 20)

plt.hist(test03, bins = 5, alpha = 0.5)    # hist 함수를 써서, 막대 그래프를 출력.

plt.xlabel("Horizontal Layer")

plt.ylabel("Vertical Layer")

=============================================================================

 

numpy-matplotlib-코드구현-사진9
numpy-matplotlib-코드구현-사진9

 

 

 이상입니다. 오늘은 numpy, matplotlib 모듈을 이용하여, 그래프를 만드는 방법을 나름대로 예제를 통해서 설명 드렸습니다. 정말 수치로 보면 머리가 아픈데 시각화 시키면 더 이해가 쉬울 거 같습니다.

 

 위에서 제가 보여드린 것은 정말 빙산의 일각입니다. 너무나도 많은 속성 값이 있습니다. 정말 요거 하나 파는데도, 많은 시간이 걸릴 것으로 생각이 되어 집니다. 정말 갈길이 멀구나 그런 생각이 요즘 많이 들고 있습니다. 여러분도, 위에꺼, 실습해보시고, 위에 제가 공유 드린 Website에 꼭 가셔서, 다른 속성값이나, Parameter 를 이용해서, 실습해보시면, 정말 도움이 되실 꺼라고 생각합니다. 그럼 항상 애기 드리지만, 서로 도우면서 같이 성장하시죠! 감사합니다. 

 

 제 Posting이 조금이나마 정보 전달에 도움이 되셨길 빌며, 되셨다면, 구독, 댓글, 공감 3종 세트 부탁 드립니다. 감사합니다.


[저작권이나, 권리를 침해한 사항이 있으면 언제든지 Comment 부탁 드립니다. 검토 후 수정 및 삭제 조치 하도록 하겠습니다. 그리고, 기재되는 내용은 개인적으로 습득한 내용이므로, 혹 오류가 발생할 수 있을 가능성이 있으므로, 기재된 내용은 참조용으로만 봐주시길 바랍니다. 게시물에, 오류가 있을때도, Comment 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.]

728x90

댓글