ㅅㅇ

matplotlib_ 01 개요 & 설정값 본문

AI_STUDY/데이터 시각화 Matplotlib Seaborn Pandas

matplotlib_ 01 개요 & 설정값

SO__OS 2022. 6. 15. 22:00
플레이데이터 빅데이터캠프 공부 내용 _ 6/15

Pandas_ 01 Matplotlib 개요 & 그리는 법 및 설정

  • 데이터의 시각화를 위한 파이썬 패키지
  • 2차원 그래프를 위한 패키지이나, 확장 API들을 이용해 3D 그래프등 다양한 형식의 시각화를 지원
  • 우리는 2차원 그래프를 다룰 것이다. => 두 개의 변수로 두 개의 축을 가진 그래프를 그림
  • 파이썬 기반의 다른 시각화 패키지의 기본이 된다.
    • Seaborn, Pandas 등이 Matplotlib를 기반으로 사용한다.
  • 장점
    • 동작하는 OS를 가리지 않는다.
    • MATLAB과 유사한 사용자 인터페이스를 가진다.
    • 그래프에 대한 상세한 설정을 할 수 있다.
    • 다양한 출력 형식으로 저장할 수 있다.

https://matplotlib.org

 

Matplotlib — Visualization with Python

seaborn seaborn is a high level interface for drawing statistical graphics with Matplotlib. It aims to make visualization a central part of exploring and understanding complex datasets. statistical data visualization Cartopy Cartopy is a Python package des

matplotlib.org

 

1.  matplotlib 그래프 구성요소

(1) figure
    - 전체 그래프가 위치할 기본 틀

(2) axes(subplot)
    - 하나의 그래프를 그리기 위한 공간(n차 n축으로 이뤄진 공간)
        - figure에 한개 이상의 axes(subplot)로 구성해서 각 axes에 그래프를 그린다.
            - figure 하나에 axes 하나를 그리는 경우가 많아 헷갈릴 수 있는데, 

              하나의 그래프를 그리기 위한 공간의 개념은 figure이 아니라, axes이다.

(3) axis 
    - 축 (x축, y축) :값의 의미
    - axis label (x, y) : 축의 레이블(설명)


(4) ticks

    : 축선의 표시 
    - Major tick
    - Minor tick


(5) title

     : 플롯 제목   
    - figure title, axes(subplot) title 


(6) legend (범례)
    - 하나의 axes내에 여러 그래프를 그린 경우 그것에 대한 설명

 

 

-  그래프 output 설정

    - (default값) matploytlib 의 그래프를 쥬피터 output 에 나오도록 설정. 

%matplotlib inline

   - 그래프를 popup으로 띄워서 실행되도록 설정.

# py이 지원하는 qt(gul 환경) : 그래프를 팝업으로 띄워서 실행되도록
!pip install pyqt5

%matplotlib qt

 

2. 그래프 그리기

1) matplotlib.pyplot 모듈을 import
    - 2차원 그래프(axis가 두개인 그래프)를 그리기위한 함수를 제공하는 모듈
    - 별칭(alias) 로 plt를 관례적으로 사용한다.

import matplotlib.pyplot as plt


2) 그래프를 그린다.
    - 2가지 방식
        - pyplot 모듈
을 이용해 그린다. (함수형 방식)  - 흔히 이 방식이 자주 쓰임
        - Figure와 Axes 객체를 생성해서 그린다. (객체지향형 방식) 
- 함수형보다 모든 설정을 다 지원한다.

                                                                                             시각화를 전문적으로 다루는 사람은 이 방식이 필요할 수 도

3) 그래프에 필요한 설정을 한다.

     - 경우에 따라, 설정에 따라 그래프그리기 전에 할 수도 

4) 화면에 그린다.
- 지연 랜더링(Deferred rendering) 메카니즘
    - 마지막에 pyplot.show() 호출 시 그래프를 그린다.
        - 주피터 노트북 맨 마지막 코드에 `;`를 붙이는 것으로 대체할 수 있다.

 

 

3. 그래프를 그리는 두가지 방식

3.1 pyplot 모듈을 이용해 그리기

  - pyplot 모듈이 그래프 그리는 함수와 Axes(Subplot) 설정 관련 함수를 제공

 

EX 1 . 기본 예제 _ figure 내 한 그래프 그리기

# 모듈 import
import matplotlib.pyplot as plt

# line plot (선 그래프) 그리기
plt.plot([1,2,3,4],[10,20,30,40])

# 설정
plt.title("pyplot 예제", fontsize=25)
plt.xlabel('X축', fontsize=15)
plt.ylabel('Y축', fontsize=15)

# 화면에 그리기
plt.show()

 

(1) 모듈 import 해주기

 

(2) plot 지정 

plt.plot(  x좌표,   y좌표 )

     - 리스트, 배열 ... 등에 담아주기  

     - 같은 인덱스끼리 만나는 지점을 이용해 line plot을 그린다.

 

(3) 그래프 설정

    설정 파일에서 설정과 현 프로그램 내 설정이 되어있어도 이렇게 함수마다 폰트 설정 가능한 것. 

 

(4) 그래프 화면에 그리기

plt.show()

 

 

EX 2 . 기본 외 필요한 설정들 _ figure 내 여러 그래프( 여러 axes ) 그리기 

 

(1)  figure 설정

  plt.figure( figsize = ( 30, 10 ),  facecolor='gray' ) 

   :  figure의 크기를 변경 - inch (세로30, 가로10) 

       mathplotlib에서는 화면에 나올 수 있는 크기로 잡아준다.

   - 기타 매개변수 설정 가능.

     facecolor: figure의 배경색

plt.figure(figsize=(30,10))

 

(2)  axes 설정 

 plt.subplot ( row, columns, num )

    - 각 subplot 위치 지정해주기

       plt.subplot(2, 2, 1)   = > 2행 2열의 1번 첫번재 공간을 뜻한다.  # 이때 공간은 1부터 시작한다.
                                               1, 2
                                               3, 4

              - 쉼표는 생략가능하다.

     - subplot 마다 그래프 plot 과 원하는 그래프 설정값을 작성해주면 된다.

# -----subplot(axes)의 위치를 지정. 첫번째 axes 그래프 그리기------------
plt.subplot(1,2,1) # 1행 2열 중에 첫 번째

#그래프 그리기
plt.plot([1,2,3,4,5],[10,20,30,40,50])

#설정
plt.title('첫번째', fontsize=25)
plt.xlabel('X축')
plt.ylabel('Y축')

# -----subplot(axes)의 위치를 지정. 두번째 axes 그래프 그리기 ----------------
plt.subplot(122) # 쉼표 생략 가능.

# 그래프 그리기
plt.scatter([1,2,3,4,5],[10,20,30,40,50])

# 설정
plt.title('두번째-산점도', fontsize=25)
plt.xlabel('X축')
plt.ylabel('Y축')

 

(3) 전체 figure 공간 조정

 plt.tight_layout() 

   - 전체 figure의 layout을 그래프 크기 등에 맞춰서 알아서 조정해준다. 
   - 필요한 공간만 남겨두고 조정해줌.
   - figure 하나에 여러 개 axes를 그릴 경우 해주는 것이 좋다.

plt.tight_layout()

plt.show()

 

EX 3 . 기본 예제 _ 하나의 subplot(axes) 에 여러 그래프 그리기와 legend(범례)

 

(1)  label : 범례(legend) 에 나올 이 plot의 이름 (설명)

    plt.plot(  x좌표,  y좌표,  label =  '그래프 이름'  )

       - 한 subplot 내에서 여러 그래프를 그릴 땐, 그래프마다 이름 지정해주기

 

(2) 범례 (legend)가 나오도록 설정

      plt.legend()

import matplotlib.pyplot as plt

plt.figure(figsize=(7,7))

# 선그래프(line plot) 산점도(scatter plot)
plt.plot([1,2,3,4,5], [1,2,3,4,5], label='라인 A') # label
plt.plot([5,4,3,2,1], [1,2,3,4,5], label="라인 B")
plt.scatter([2,3,2,3],[4,5,3,5], label="산점도")

# 범례(legend)가 나오도록 설정.
plt.legend()

plt.show()

 

 3.2. Figure 와 Axes 객체를 이용해 그리기

- Figure에 axes를 추가한 뒤 axes에 그래프를 그린다.

 

- axes 생성 방법
    (방법 1) figure.add_subplot() 메소드 이용
        - figure를 먼저 생성후 axes 들을 하나씩 추가
    (방법 2) pyplot.subplots() 함수를 이용
        - figure와 axes배열 을 동시에 생성

 

 

3.2.1  figure.add_subplot() 메소드 이용

 

- figure객체에 axes를 추가하는 형태

 

(1) figure 객체 생성

 

(2) figure에 subplot(axes)를 추가

     - > ax1 = fig.add_subplot(행, 열, 위치)     :  nrows(총행수),  ncols(총열수),  index(axes위치) 지정

          ax1 = plt.gca()    : 하나의 figure에 한 개의 axes를 사용할 경우 GetCurrentAxes
       

# figure 객체 생성
fig = plt.figure(figsize=(10,10))

#figure에 subplot(axes)를 추가 -> add_subplot(행, 열, 위치)
ax1 = fig.add_subplot(2,2,1) # 2행 2열 중 첫번째 공간
ax2 = fig.add_subplot(2,2,2) # 2행 2열 중 두번째 공간
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(224)

 

(3) 그래프 설정 _ 글씨 지정 관련 함수 시 함수형과 달리 set_ 앞에 붙여주는 것 까먹지 않기

   axes[0,1].set_title()    axes[1,1].set_xlabel('x축')    axes[1,1].set_ylabel('y축')

 

 

 

3.2.2 pyplot.subplots()

- nrows, ncols 로 axes개수와 위치 지정
- 반환: figure와 axes(subplot)들을 담은 ndarray(numpy배열)

 

(1)  ndarray 로 네 개의 axes를 묶어서 반환.

fig, axes = plt.subplots(2,2, figsize=(15,10))
print(type(axes), axes.shape)
print(type(axes[0,0]))

<class 'numpy.ndarray'> (2, 2)
<class 'matplotlib.axes._subplots.AxesSubplot'>

axes 공간 생성

 

(2) 각각의 axes에 함수로 plot 및 그래프 설정해주기

  axes[0,0]    axes[0,1]   

  axes[1,0]    axes[1,1]

 

(3) 그래프 설정 label 지정 관련 함수 시, 함수형과 달리 set_ 앞에 붙여주는 것 까먹지 않기

   axes[0,1].set_title()    axes[1,1].set_xlabel('x축')    axes[1,1].set_ylabel('y축')

 

import matplotlib.pyplot as plt

# ndarray 로 네 개의 axes를 묶어서 반환.
fig, axes = plt.subplots(2,2, figsize=(15,10))

axes[0,0].plot([1,2,3,4,5],[1,2,3,4,5])
axes[0,0].set_title('첫번째')


axes[0,1].plot([1,2,3], [1,2,3], label='Line 1')
axes[0,1].plot([3,2,1], [1,2,3], label='Line 2')
axes[0,1].legend()
axes[0,1].set_title('두번째')
axes[0,1].grid(True)

axes[1,0].plot([1,2,3,4,5],[5,4,3,2,1])

axes[1,1].scatter([1,2,3,4,5],[1,2,1,4,5])
axes[1,1].set_xlabel('x축')
axes[1,1].set_ylabel('y축')


plt.tight_layout()
plt.show()

 

 

4. 색상과 스타일

4.1 색 지정

(1)  color 또는 c 속성을 이용해 지정
- 색상이름으로 지정. 
    - 색이름 또는 약자(matplotlib에서 지원. 아래꺼만.)로 지정 가능
    - 'red', 'r'

https://matplotlib.org/2.0.2/examples/color/named_colors.html

 

color example code: named_colors.py — Matplotlib 2.0.2 documentation

color example code: named_colors.py (Source code, png, pdf) """ ======================== Visualizing named colors ======================== Simple plot example with the named colors and its visual representation. """ from __future__ import division import m

matplotlib.org

 

(2) HTML 컬러 code
    - #으로 시작하며 RGB의 성분을 16진수로 표현(0-255)
    - #RRGGBB 또는 #RRGGBBAA   (투명도 두자리 까지) 00(투명) ~ FF(로 갈수록 진해진다.)
    - #FF0000, #00FF00FA 
https://htmlcolorcodes.com/    

 

HTML Color Codes

Easily find HTML color codes for your website using our color picker, color chart and HTML color names with Hex color codes, RGB and HSL values.

htmlcolorcodes.com

    - picker, chart(코드), name(색이름) 제공사이트


(3) 0 ~ 1 사이 실수로 흰식과 검정색 사이의 회색조를 표시
    - 0 ~ 1사이 실수 - 흑백에서 회색조   (  0: 검정, 1: 흰색 )  

 

plt.plot([1,2,3,4,5],[10,20,30,40,50], color='r') # c='r'

plt.plot([1,2,3,4,5],[10,20,30,40,50], color='#88C82522') 

plt.plot([1,2,3,4,5],[10,20,30,40,50], color='LightCoral')

plt.plot([1,2,3,4,5],[10,20,30,40,50], color='0.8')

 

(4) 투명도 설정

     0 ~ 1 사이 실수를 지정 (default 1)      # 다음 내용 scatter marker 배울 때 자세히 설명

plt.plot([1,2,3,4,5],[10,20,30,40,50], color='LightCoral', alpha = 0.2)

 

 

4.2 Style

 

 - Style: 그래프의 여러 시각효과들을 미리 설정해 놓은 것
 - matplotlib는 다양한 스타일들을 미리 정의해 놓고 있다. 아래 url 페이지에서 원하는 스타일 찾아서 

    https://matplotlib.org/gallery/style_sheets/style_sheets_reference.html

 

https://matplotlib.org/gallery/style_sheets/style_sheets_reference.html

 

matplotlib.org

 

- style 설정

plt.style.use('dark_background')

 

- 스타일 초기화

  설정한 style은 프로그램 내 계속 적용이 되어 그래프 그릴 때 마다 적용됨. 

import matplotlib as mpl
mpl.rcParams.update(mpl.rcParamsDefault)
# 기본값으로 설정
plt.style.use('default')

 

5. 기타 설정

 

5.1 폰트 크기 설정 

      fontsize =    size =

- figure의 title, axes내 title, xlabel, ylabel, lebel범례지정 등 폰트와 관련된 함수 설정에서 

   폰트 크기 설정이 가능하다. 

- 설정 파일에서 설정, 현 프로그램 상 설정이 되어있어도 이렇게 함수마다 폰트 설정 가능한 것. 

plt.title("pyplot 예제", fontsize=20)

ax1.text(0.4, 0.5, '안녕', fontsize=30)

plt.legend(loc = 'lower right', fontsize = 20) # 이때는 size하면 오류.

 

 

5.2 figiure title 지정

 

- 변수에 넣어 지정해주기

fig = plt.figure(figsize= (20, 6))
fig.suptitle('년도별 각종 변화량', fontsize = 25)

 

 

5.3  축 눈금 tick label 조정

 

- 눈금의 label 이름들을 리스트 안에 넣어 주기.

   label 생략 시 눈금의 value(값)이 label이 된다.

plt.xticks([0,1,2])
plt.yticks([1, 10, 15])

 

5.4 축의 값의 범위를 지정

    label 나타나는 이름이 아니라 축의 값 범위 자체를 지정하는 것.

# y축의 값의 범위를 지정    
plt.ylim(0, 850)

# x축의 값의 범위를 지정
plt.xlim(-2, 20)

 

5.5  grid 설정

- default False

axes1.grid(True)

 

 

5.6 그래프 내 txt 설명 달 때

  ax1.text(  x좌표,   y좌표, 넣을 문자열, [기타 설정 매개변수] ) 

- 데이터 레이블( 데이터 계열의 값이나 항목을 이름표 형식으로 표현 ) 달 때 주로 사용한다.

# ex1) 텍스트를 subplot에 그린다.
ax1.text(0.4, 0.5, '안녕', fontsize=30) # (x좌표, y좌표, 문자열)

# ex2)
for i, ax in enumerate([ax1,ax2,ax3,ax4], start=1):
    txt = 'ax {}'.format(i) # f"ax{i}"
    ax.text(0.4, 0.5, txt, fontsize=30)

 

 

5.7 line plot 의 linewidth 두께 설정

plt.plot([1,2,3,4,5],[10,20,30,40,50], linewidth=4) # linewidth 두께

 

 

** 만약 plt 메소드에 값을 넣었다면, restart 하고 다시 실행하기

plt.xlabel = '~~'  이렇게 실행하면 xlabel 메소드에 값이 들어가버린다. 다시 restart,  import 해줘야 한다.