본문 바로가기
Python/Matplotlib

파이썬 plot(graph) 작성 예제 - matplotlib(14)

by 콩돌 2019. 5. 12.
반응형

파이썬 버전 3.7 기준

matplotlib 버전 3.0.3 기준



 파이썬 plot(graph) 작성 예제


본 포스팅에선 앞선 포스팅에서 다루었던 내용들을 활용하여 플롯(혹은 그래프)를 직접 작성해보도록 한다.

그리고 앞선 포스팅과는 다르게 스크립트 예제를 활용할 것이다.


plot 작성에 앞서 관련된 포스팅은 아래와 같다.


 

 

 

 

선행 포스팅

  pyplot 개요와 그래프 작성 기초 - matplotlib(6)

  plot함수 입력변수와 선의 포맷팅(마커, 색, 선모양 두께) - matplotlib(7)

  축(axes,axis)의 포맷팅(범위, 스케일) - matplotlib(8)

  축(axes,axis)의 포맷팅(눈금(틱,tick), 축제목(라벨,label)) - matplotlib(9)

  pyplot 그리드(grid)와 제목(title) - matplotlib(10)

  레전드(legend, 범례)의 작성법, 위치설정, 다중레전드 - matplotlib(11)

  레전드(legend, 범례) 처리기(handler) 기초 - matplotlib(12)

  레전드(legend, 범례) 함수의 입력 변수 - matplotlib(13) 

 

 

 

 





 plot 작성 예제


plot을 작성하기 위해서 아래와 같은 스크립트를 작성하였다. 

아래 스크립트 예제는 그래프를 그리기 위한 스크립트로 다운로드 링크를 다음과 같이 걸어두었다.

스크립트 예제 아래의 그림은 해당 스크립트를 작동시킬 경우 생성되는 그래프이다.

각각의 파트에 대대한 설명은 아래 섹션에 첨부되어 있다.


plot 작성 스크립트 예제) 다운로드: Plot_ex_01.py

# 관련 모듈의 임폴트

import matplotlib.pyplot as plt

import numpy as np


# 입력 데이터

X   = np.arange(3)

Y_A = np.arange(1, 4)

Y_B = np.arange(3, 0, step=-1)


# plot 입력

line1, = plt.plot(X, Y_A, 'k-', label='A', linewidth=1)

line2, = plt.plot(X, Y_B, 'r--', label='B', linewidth=1)


# X 및 Y 범위 설정

plt.xlim(X[0], X[-1])

plt.ylim(np.min(np.append(Y_A, Y_B)), np.max(np.append(Y_A, Y_B)))


# 그래프의 타이틀과 x, y축 라벨링

plt.title('title', pad=10)

plt.xlabel('X axis', labelpad=10)

plt.ylabel('Y axis', labelpad=10)


# 틱설정

plt.xticks(np.linspace(X[0], X[-1], 11))

plt.yticks(np.linspace(np.min(np.append(Y_A, Y_B)), np.max(np.append(Y_A, Y_B)), 11))

plt.minorticks_on()

plt.tick_params(axis='both', which='both', direction='in', pad=8, top=True, right=True)


# 레전드 및 그리드 설정

plt.legend(loc='upper right', fancybox=False, edgecolor='k', framealpha=1.0)

plt.grid(color='gray', dashes=(2, 2))


# 플롯 출력

plt.show()





  입력 데이터

그래프를 그리기 위해 입력된 데이터로, 플롯 양식에는 크게 관련이 없는 데이터이다. 

코드 작성에 따라 언제든지 대체가 가능한 부분이므로 본 포스팅에서는 크게 중요한 부분은 아니다.


입력 데이터)

# 입력 데이터

X   = np.arange(3)

Y_A = np.arange(1, 4)

Y_B = np.arange(3, 0, step=-1)



  plot 작성 (필수)

이 파트는 plot 작성을 위한 부분으로 plot()함수를 이용하여 plot을 그린다.

플롯을 작성하기 위해 필수적으로 작성해야하는 파트이다. 

이 파트에서는 기본적으로 plot을 그리기 위해 데이터(X, Y_A, Y_B)를 입력받아 plot을 그린다.

또한 플롯 데이터 입력 이후로 입력되는 변수들은 그려진 플롯 선 양식과 플롯의 라벨을 설정하는 변수이다.

이 부분에 대한 자세한 설명은 matplotlib의 (6), (7)번 포스팅에 되어 있다.


plot 작성 입력)

# plot 입력

line1, = plt.plot(X, Y_A, 'k-', label='A', linewidth=1)

line2, = plt.plot(X, Y_B, 'r--', label='B', linewidth=1)


  x, y 범위 설정

plot 데이터의 범위를 설정하는 부분으로, 이 파트를 작성하지 않더라도 코드가 자동으로 범위를 설정하게 된다.

본 포스팅에서는 X의 첫 데이터와 마지막 데이터를 이용하여 x축의 범위를 설정하였고,

Y_A, Y_B 데이터의 최대값과 최소값을 통해 y축의 범위를 설정하였다. 

이 파트에서 사용된 함수에 대한 자세한 설명은 matplot의 (8)번 포스팅에 있다.


각 축 범위 입력)

# X 및 Y 범위 설정

plt.xlim(X[0], X[-1])

plt.ylim(np.min(np.append(Y_A, Y_B)), np.max(np.append(Y_A, Y_B)))


  플롯의 타이틀 및 x, y 축 라벨링

이 파트에서는 플롯의 타이틀과 x, y축의 라벨을 설정된다.

현재는 임의로 플롯 타이틀은 title로, 각축의 라벨은 X axis, Y axis로 명명하였으나, 필요에 따라 수정하면 된다.

각각의 타이틀 및 라벨의 패드(pad)는 10을 입력하여 플롯으로부터 어느정도 떨어지게 설정해놓았다.

이 파트에서 사용된 함수에 대한 자세한 설명은 matplot의 (9), (10)번 포스팅에 있다.


타이틀 및 각 축 라벨링의 입력)

# 그래프의 타이틀과 x, y축 라벨링

plt.title('title', pad=10)

plt.xlabel('X axis', labelpad=10)

plt.ylabel('Y axis', labelpad=10)


  틱(tick) 설정

이 파트에서는 플롯 각 축의 틱을 설정하였다.

x, y축의 틱의 범위와 위치를 설정하기 위해서 xticks(), yticks()함수를 활용하였고,  함수의 입력으로써넘파이(Numpy)의 함수를 활용하어 틱의 범위와 위치를 비교적 상세하게 설정하였다. 

minorticks_on() 함수를 이용하여 minortick을 활성화하였다.

그리고 각 틱의 형태를 상세하게 컨트롤하기 위해서 tick_params()함수를 활용하여 틱 라벨과 축간의 거리, 위쪽 및 오른쪽 경계에서의 틱활성화, 틱의 방향 등을 설정하였다.

이 파트와 관련된 함수에 대한 자세한 설명은 matplot의 (9)번 포스팅에 있다. 

(tick_params()함수에 대한 내용은 상기 포스팅에 향후 추가 예정이다.)


틱 입력)

# 틱설정

plt.xticks(np.linspace(X[0], X[-1], 11))

plt.yticks(np.linspace(np.min(np.append(Y_A, Y_B)), np.max(np.append(Y_A, Y_B)), 11))

plt.minorticks_on()

plt.tick_params(axis='both', which='both', direction='in', pad=8, top=True, right=True)



  레전드 및 그리드 설정

이 파트에서는 플롯의 레전드와 그리드를 설정하였다.


먼저 레전드는 오른쪽 위 코너에 위치하게 설정되었으며, 각진 모서리로 만들기 위해 fancybox 옵션을 False로 설정하였다.

레전드 박스를 이루는 선의 색은 검정색으로 설정하였으며, 레전드 박스의 투명도는 1.0으로 투명하지 않도록 설정하였다.

 

그리드의 컬러는 회색으로 설정하였고, 그리드 선을 점선으로 만들기 위해 dash 옵션을 활용하였다.

회색으로 설정하는 또 다른 방법으로는 그리드의 색을 검정색으로 설정하고 투명도를 조정하는 방식이 있다.


레전드 및 그리드 입력)

# 레전드 및 그리드 설정

plt.legend(loc='upper right', fancybox=False, edgecolor='k', framealpha=1.0)

plt.grid(color='gray', dashes=(2, 2))


반응형

댓글