ㅅㅇ
matplotlib_ 01 개요 & 설정값 본문
Pandas_ 01 Matplotlib 개요 & 그리는 법 및 설정
- 데이터의 시각화를 위한 파이썬 패키지
- 2차원 그래프를 위한 패키지이나, 확장 API들을 이용해 3D 그래프등 다양한 형식의 시각화를 지원
- 우리는 2차원 그래프를 다룰 것이다. => 두 개의 변수로 두 개의 축을 가진 그래프를 그림
- 파이썬 기반의 다른 시각화 패키지의 기본이 된다.
- Seaborn, Pandas 등이 Matplotlib를 기반으로 사용한다.
- 장점
- 동작하는 OS를 가리지 않는다.
- MATLAB과 유사한 사용자 인터페이스를 가진다.
- 그래프에 대한 상세한 설정을 할 수 있다.
- 다양한 출력 형식으로 저장할 수 있다.
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'>
(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
(2) HTML 컬러 code
- #으로 시작하며 RGB의 성분을 16진수로 표현(0-255)
- #RRGGBB 또는 #RRGGBBAA (투명도 두자리 까지) 00(투명) ~ FF(로 갈수록 진해진다.)
- #FF0000, #00FF00FA
- https://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
- 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 해줘야 한다.
'AI_STUDY > 데이터 시각화 Matplotlib Seaborn Pandas' 카테고리의 다른 글
matplotlib_ 02_4 각종 그래프 그리기 _ 파이차트 (Pie Chart) (0) | 2022.06.16 |
---|---|
matplotlib_ 02_3 각종 그래프 그리기 _ 막대그래프(Bar plot) (0) | 2022.06.16 |
matplotlib_ 02_2 각종 그래프 그리기 _ 산점도 (Scatter Plot) (0) | 2022.06.16 |
matplotlib_ 02_1 각종 그래프 그리기 _ 선 그래프 (line Graph) (0) | 2022.06.15 |
matplotlib_ 00 한글처리 (0) | 2022.06.14 |