[Home] Python으로 돌아가기

Matplotlib-1 (0) 해상도(dpi) (1) 기본 사용법(plt.plot), (2) IPython

[참조]

 

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


 

(0) 해상도(dpi)

1) 기본 dpi 확인

Matplotlib에서 기본 해상도를 확인하는 방법:


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 내에서 설정:

  1. Spyder를 실행
  2. 메뉴에서 'Tools' > 'Preferences'를 선택 
  3. 왼쪽 사이드바에서 'IPython console' > 'Graphics' 탭을 선택 
  4. 'Figure DPI' 설정을 찾아 원하는 값으로 변경 
  5. '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) 마커, 선, 색상

3) 주요 함수


plot()
subplot()   # 개별 subplot 지정 및 생성
subplots()  # 여러 subplot 한 번에 생성

title()

xlabel()
ylabel()

axis()

xlim()
ylim()

tight_layout()

grid()
grid(True, which='both')

legend()

show()

figure()
text()

xscale(...) # xscale("log")이면 로그스케일
yscale(...)

minorticks_on()
minorticks_off()
    

 

(2) IPython

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

1) 콘솔 내에서 그래프 출력

Ex) 그림을 셀 안에 고정 출력 (기본값)


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

Ex) 그림을 셀 안에 인터랙티브하게 출력 (줌/이동 가능)


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

2) 별도창에서 interactive 출력

Ex) 별도 창으로 출력


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

3) 별도창에서 static 출력

Ex) 별도 창으로 출력


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