본문 바로가기
Python/Matplotlib

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

by 콩돌 2019. 4. 11.
반응형

파이썬 버전 3.7 기준

matplotlib 버전 3.0.3 기준



 pyplot의 plot함수 입력변수와 선의 포맷팅


본 포스팅에서는 matplotlib.pyplot.plot()에 입력되는 구성요소와 선의 포맷 설정(마커, 색, 선모양 두께)에 대해 설명하도록 한다.



  matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)


plot함수의 입력요소는 위와 같으며 자세한 내용은 아래에 설명한다. 

플롯 작성법에 대한 설명은 전 포스팅(링크)에 설명되어있다.

  *args

*args에 입력되는 요소와 작성법은 전 포스팅(링크)에 설명되어 있으며 x, y, fmt이 입력된다.

x는 x축에 입력되는 데이터이며, y는 y축에 입력하는 데이터를 의미한다.

x나 fmt는 선택적으로 입력이 가능하지만 y는 반드시 입력되어야 한다.

두 데이터는 리스트나 튜플, numpy.array 등 배열과 유사한(array-like) 자료형을 입력받는다.

fmt는 선이나 마커의 포맷을 입력하는 란이며 문자열(string, str)을 입력 받는다. 자세한 내용은 아래에 설명하도록 한다.


  scalex, scaley 

scalex와 scaley는 x와 y축의 스케일을 자동으로 조절하도록 설정하는 독립변수이다.

논리형(bool) 자료형이 입력되며, 기본값은 True이다.

이 값이 False이 입력될 경우 xlim(), ylim()등을 이용하여 스케일을 수동으로 설정해야한다.


  data

data는 딕셔너리, pandas의 DataFrame, Numpy의 Structured array와 같이 인덱싱이 가능한 오브젝트를 입력받는다. 

data를 입력하는 순간 plot의 입력방법이 달라지는데 다음과 같다. 


data 사용시 입력 형식)

plot('xlabel', 'ylabel', data=obj)


여기서 obj는 인덱싱이 가능한 오브젝트이며 'xlabel'은 입력된 obj에서 x축에 해당되는 문자열 인덱스이고,  'ylabel'은 obj에서 y축에 해당되는 문자열 인덱스이다.

*args와 마찬가지로 자세한 사용법은 전 포스팅(링크)에서 "라벨링된 데이터의 plot" 파트에 설명되어있다.


  **kwargs

**kwargs는 하나의 라인에 대해 속성(properties)를 입력으며, 선택적으로 입력된다. 

선의 포맷을 설정하는대 사용되어지며 자세한 사항은 fmt와 마찬가지로 아래에서 다루도록 한다.



  선과 마커의 포맷팅


위에서는 플롯에 입력요소에 대해 다루었다. 이 파트에서는 플롯의 포맷을 설정하는 법에 대해 다루도록 한다.

먼저 플롯을 출력하기 위한 입력요소와 포맷을 설정하기 위한 입력요소를 추리면 아래와 같다.


matplotlib.pyplot.plot(x, y, fmt**kwargs)


여기서 fmt와 **kwargs가 선의 포맷을 설정하는 변수들이며 본 파트에서 설명한 내용들이다.


  fmt

fmt는 색깔, 마커의 종류, 선의 형태를 나타내는 문자열(str, string)을 입력받으며 형식은 아래와 같다.

 

fmt = '[color][marker][line]'


먼저 위에서 color는 색깔을 입력하는 곳이다.

색을 설정하기 위해 입력되는 문자와 해당하는 색은 다음표에 설명하였다.

 문자열

 색

 'b'

 파란색(blue)

 'g'

 초록색(green)

 'r'

빨간색(red)

 'c'

청록색(cyan)

 'm'

자주색(magenta)

 'y'

노란색(yellow)

 'k'

흑색(black)

 'w'

백색(white)


marker에는 마커 모양을 입력하며 아래와 같은 문자열을 입력함으로써 마커모양을 설정할 수 있다. 

이곳(링크)이곳(링크) 역시 자세한 설명이 나와있다.

문자열 

설명

 

문자열

설명

'.'

점(point)

 

's'

사각형(squre)

','

픽(pixel)

 

'p'

오각형(pentagon)

'o'

원(circle)

 

'*'

별모양(star)

'v'

 역삼각형(triangle_down)

 

'h'

육각형1(hexagon1)

'^'

삼각형(triangle_up)

 

'H'

육각형2(hexagon2)

'<'

삼각형(왼쪽)(triangle_left)

 

'+'

더하기(plus)

'>'

삼각형(오른쪽)(triangle_right)

 

'x'

x모양(x)

'1'

삼각뿔(아래쪽)(tri_down)

 

'D'

다이아몬드(diamond)

'2'

삼각뿔(위쪽)(tri_up)

 

 'd'

얇은다이아몬드(thin diamond)

'3'

삼각뿔(왼쪽)(tri_left)

 

 '|'

브이라인(vline)

'4'

삼각뿔(오른쪽)(tri_right)

 

 '_'

에이치라인(hline)


line에는 선모양을 입력하며 아래와 같은 문자열을 입력함으로써 선모양을 설정할 수 있다. 

 문자열

설명

'-'

실선(Solid line)

'--'

 대시선(Dashed line)

'-.'

 대시-점 선(Dash-dot line)

':'

 점선(Dotted line)


fmt입력 예제)

In[3]: plt.plot([1,2,3], [1,2,3], 'r.-')

In[4]: plt.plot([1,2,3], [1,2,3], 'mo-.')



  **kwargs

**kwargs는 하나의 라인에 대해 속성(properties)를 입력으며, 선택적으로 입력된다. 

모든 속성에 대한 자세한 사항은 이곳(링크)에 있으므로 참고하면 되며, 본 포스팅에서는 몇 가지 주요 속성에 대해 설명한다.

 

 속성

 입력자료형

 설명

 label

 object

 라벨로 입력받는 변수를 문자열형(string, str)으로 치환하여 라벨을 세팅한다.

 linestyle

 str

 선스타일을 설정하며, fmt에서 line자리에 입력되는 문자열과 동일한 문자열을 입력받는다.

 'solid', 'dashed', 'dashdot', 'dotted'로도 입력이 가능하다.

 linewidth

 float

 선의 두께를 설정한다. 

 color

 str

 선의 색깔을 설정하며, fmt에서 color자리에 입력되는 문자열과 동일한 문자열을 입력받는다. 

 색을 지칭하는 영어단어(red, blue 등)으로도 입력이 가능하다.

 dashes

 sequence(floats)

 사용자가 직접 점선(dash line)을 조정할 수 있게 한다. 

 실수형의 시퀀스(리스트, 튜플 등)를 입력받으며 요소의 수는 반드시 짝수여야 한다.

 marker

 str 

 마커스타일을 설정하며, fmt에서 market자리에 입력되는 문자열과 동일한 문자열을 입력받는다.

 markersize

 float

 마커의 크기를 설정한다.

 markevery

 None, int, (int, int), list[int], slice, float, (float, float)

 데이터에서 마커를 만들 샘플을 추출하도록한다.

 예를들어, markevery=20이면 20번째 데이터마다 마커를 생성한다.

 int로 입력될 경우 입력되는 수에 대응하여 스킵을 하여 마커를 생선한다.

 float으로 입력될 경우 상대적인 거리에 따라 마커를 생성한다.

 visible

 bool

 입력되는 선 혹은 artist들을 보이게 할지 안할지 결정해주는 변수이다.

 True로 입력시 보이며, False로 입력시 보이지 않게된다.

 fillstyle

 str

 마커를 채우는 방식을 설정한다.

 'full', 'left', 'right', 'bottom', 'top', 'none'을 입력으로 받는다.


속성 입력 예제)

In[3]: plt.plot([1,2,3], [1,2,3], linewidth=2, color='red')

In[4]: plt.plot(y, marker='o', markersize=10, markevery=5, fillstyle='top')



반응형

댓글