Lecture 강의

Undergrads 학부 Graduates 대학원 역학(Mech)/설계(Design)/FEM 인공지능(AI)/기계학습(ML)/IoT SAP/ETABS OpenSees/FeView/STKO 아바쿠스(Abaqus) 파이썬(Python)/매트랩(Matlab) 엑셀(Excel) VBA 마이다스(MIDAS)

[03. 패키지 - Matplotlib] (0) 해상도(dpi) (1) 기본 사용법(plt.plot), (2) IPython

작성자 : kim2kie

(2023-02-19)

조회수 : 1928

[참조]

 

Matplotlib은 그래프를 그리는 패키지이다.

(0) 해상도(dpi)

(1) 기본 사용법
 1) 2D plot
 2) 마커, 선, 색상
 3) 주요 함수

(2) IPython
 1) 그래프를 콘솔 내에서 출력할 경우
 2) 그래프를 별도창에 출력하고 interactive하게 사용할 경우
 3) 그래프를 별도창에 출력하고 interactive하지 않게 사용할 경우

 


 

(0) 해상도(dpi)

1) 기본 dpi 확인하기

import matplotlib as mpl
print(mpl.rcParams['figure.dpi'])
ans) 72.0

spyder와 prompt에서 matplotlib의 dpi가 각각 72와 100으로 다르다.
따라서, 자체 셋팅을 하여 사용하는 spyder에서 dpi를 100으로 변경해 줄 필요가 있다.

2) dpi 셋팅하기(코드에서 전역 설정 -> 매번 설정해야 함)

import matplotlib.pyplot as plt
plt.rc('figure', dpi=100)
plt.rc('font', size=12)
plt.rc('lines', linewidth=2)

또는 

import matplotlib as mpl
mpl.rcParams['figure.dpi'] = 300
mpl.rcParams['font.size'] = 12
mpl.rcParams['lines.linewidth'] = 2

3) Spyder의 기본 DPI 설정을 변경하는 방법

Spyder 내에서 설정:
a. Spyder를 실행
b. 메뉴에서 'Tools' > 'Preferences'를 선택 
c. 왼쪽 사이드바에서 'IPython console' > 'Graphics' 탭을 선택 
d. 'Figure DPI' 설정을 찾아 원하는 값으로 변경 
e. 'Apply' 버튼을 클릭한 후 'OK'를 눌러 설정을 저장

 

(1) 기본 사용법

1) 2D plot

  • Ex)
    import matplotlib.pyplot as plt
    import numpy as np

    x = np.linspace(0,1,50)

    y1 = np.cos(4*np.pi*x)
    y2 = np.cos(4*np.pi*x)*np.exp(-2*x)

    plt.plot(x,y1) # 2D 선그래프
    plt.plot(x,y2)

    plt.show() # 화면 표시. Jupyter나 IPython에서는 자동 표시되므로 필요없음
    (Note: plt.show()는 matlab의 "hold off"와도 같은 기능을 한다.
    따라서 그래프를 여러 개 별도로 그릴 경우 사용해야 한다.)



     

  • Ex-계속) r(raw) 문자열 vs 일반 문자열
    plt.plot(x,y1,'r-*',   # 'r-*': red, solid line
             label=r'$sin(4 \pi x)$',lw=1) # legend label과 line width
             # r을 붙여 만든 raw문자열은 escape 문자(\t, \n 등)가 적용되지 않는다.
    plt.plot(x,y2,'b--o',
             label=r'$ e^{-2x} sin(4\pi x) $',lw=1)
    plt.title(r'$sin(4 \pi x)$ vs. $ e^{-2x} sin(4\pi x)$') # title
    plt.xlabel('x') # x축 label
    plt.ylabel('y') # y축 label
    plt.text(0.5,-1.0,r'This is sample') # (x,y) 위치에 text를 출력
    plt.axis([0,1,-1.5,1.5]) # axis의 범위
    plt.grid(True)
    plt.legend(loc='upper left') # legend location
    plt.tight_layout() # 여백 조정
    plt.show() # 화면 표시 



     

  • Ex-계속) subplot()
    plt.subplot(2,1,1)
    plt.plot(x,y1,'r-*',lw=1)
    plt.grid(True)
    plt.ylabel(r'$sin(4 \pi x)$')
    plt.axis([0,1,-1.5,1.5])

    plt.subplot(2,1,2)
    plt.plot(x,y2,'b--o',lw=1)
    plt.grid(True)
    plt.xlabel('x')
    plt.ylabel(r'$ e^{-2x} sin(4\pi x) $')
    plt.axis([0,1,-1.5,1.5]) 

    plt.tight_layout() 
    plt.show()


     

2) 마커, 선, 색상
 

  • Markers
    '.'  # point marker
    ','  # pixel marker
    'o'  # circle marker
    'v'  # triangle_down marker
    '^'  # triangle_up marker
    '<'  # triangle_left marker
    '>'  # triangle_right marker
    '1'  # tri_down marker
    '2'  # tri_up marker
    '3'  # tri_left marker
    '4'  # tri_right marker
    '8'  # octagon marker
    's'  # square marker
    'p'  # pentagon marker
    'P'  # plus (filled) marker
    '*'  # star marker
    'h'  # hexagon1 marker
    'H'  # hexagon2 marker
    '+'  # plus marker
    'x'  # x marker
    'X'  # x (filled) marker
    'D'  # diamond marker
    'd'  # thin_diamond marker
    '|'  # vline marker
    '_'  # hline marker

  • Line Styles
    '-'  # solid line style
    '--' # dashed line style
    '-.' # dash-dot line style
    ':'  # dotted line style

  • Colors
    'b'  # blue
    'g'  # green
    'r'  # red
    'c'  # cyan
    'm'  # magenta
    'y'  # yellow
    'k'  # black
    'w'  # white

  • Example format strings:
    'b'   # blue markers with default shape
    'or'  # red circles
    '-g'  # green solid line
    '--'  # dashed line with default color
    '^k:' # black triangle_up markers connected by a dotted line

     

3) 주요 함수

  • plot()
    subplot()
    title()
    xlabel()
    ylabel()
    axis()
    xlim()
    ylim()
    tight_layout()
    grid()
    legend()
    show()
    figure()
    text()
    subplots()
    xscale(...) : xscale("log")이면 로그스케일
    minorticks_on(), minorticks_off()
    grid(True, which='both')
    yscale(...) 

 

(2) IPython 

  • IPython(Interactive Python) 콘솔에서 interactive(대화형)하게 그래프를 그릴 수 있다.
    "%matplotlib"이라는 magic command와 "matplotlib.pyplot.ion()", "matplotlib.pyplot.ioff()"를 통해 제어한다.

     

1) 그래프를 콘솔 내에서 출력할 경우

  • Ex)
    [1] %matplotlib inline

    # plt.plot() 같은 명령이 있을 때마다 콘솔 내에 출력
    # plt.show() 를 호출하지 않아도 됨


2) 그래프를 별도창에 출력하고 interactive하게 사용할 경우
 

  • Ex)
    [1] %matplotlib qt5
    [2] matplotlib.pyplot.ion()

    # plt.plot() 등을 호출하면 바로 그래프가 업데이트
    # plt.show()를 호출할 필요가 없음

 

  • Ex)
    [1] %matplotlib qt5
    [2] matplotlib.pyplot.ioff()

    # plt.plot() 등을 호출후 plt.show()를 호출해야 그래프가 업데이트