Data_Analysis_Track_33/Python

Python_matplotlib_01(한글 설정, matplotlib 개요)

lsc99 2023. 9. 20. 17:05

한글 설정

matplotlib에 설정되있는 폰트가 한글을 지원하지 않기 때문에 그래프의 한글이 깨져서 나온다.

-> 그래서 한글을 사용하기 위해 설정을 변경해야 한다.

 

# cache 파일 조회
# 다음 실행 결과로 나온 디렉토리 안의 파일을 삭제한다. 
print(mpl.get_cachedir())

아래 코드와 같이 입력하고 실행한 뒤 설정파일 경로를 찾아 matplotlib 관련 전역 설정들을 찾아 바꿔준다.

import matplotlib as mpl
print(mpl.matplotlib_fname())

경로의 matplotlibrc 파일에서 아래의 설정으로 바꿔준다.

  • font.family:Malgun Gothic
  • axes.unicode_minus:False

matplotlib 개요

데이터 시각화
- 데이터의 분석 결과를 쉽게 이해하고 판단할 수 있도록 데이터를 시각적으로 표현하여 전달하기 위한 과정을 말한다.

사용자가 편리하게 이해하도록 하는 데이터 시각화를 위해 파이썬 시각화 라이브러리를 활용한다.

 

  • 대표적 파이썬 시각화 라이브러리
  • matplotlib
  • seaborn
  • pandas
  • plotly
  • folium

Matplotlib
- 데이터의 시각화를 위한 파이썬 패키지
- 2차원 그래프를 위한 패키지이나 확장 API들을 이용해 3D 그래프등 다양한 형식의 시각화를 지원
- 파이썬 기반의 다른 시각화 패키지의 기본이 된다.
- Seaborn, Pandas 등이 Matplotlib를 기반으로 사용한다.

장점
- 동작하는 OS를 가리지 않는다.
- MATLAB과 유사한 사용자 인터페이스를 가진다.
- 그래프에 대한 상세한 설정을 할 수 있다.
- 다양한 출력 형식으로 저장할 수 있다.

  • figure
  • axes(subplot)
  • axis
    • 축 (x축, y축)은 값들을 위치시키는 선을 말한다.
    • axis label (x, y) : 축의 레이블(설명)
  • ticks : 축의 값을 알려주는 눈금
    • Major tick
    • Minor tick
  • title : 플롯 제목
  • legend (범례)
    • 하나의 axes내에 여러 그래프를 그린 경우 그것에 대한 설명
%matplotlib inline
# %matplotlib qt # qt -> GUI 프로그램 화면을 만드는 라이브러리

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(15,7), facecolor='gray') #facecolor: figure의 배경색
axes1 = fig.add_subplot(1,2,1)
axes2 = fig.add_subplot(1,2,2)

axes1.plot([1,2,3,4,5], [10,20,30,40,50], label='line1')
axes1.plot([1,2,3,4,5], [50,40,30,20,10], label='line2')
axes2.scatter(np.random.randint(100, size=50), np.random.randint(100, 200, size=50), color='r')

fig.suptitle('Example of Plot', size=25, color='blue') #size: 폰트크기, color: 글자색
axes1.set_title("PLOT 1", size=20)
axes2.set_title("Plot 2", size=20)

axes1.set_xlabel("X축", size=15)
axes1.set_ylabel("Y축", size=15)
axes2.set_xlabel("가격1", size=15)
axes2.set_ylabel('가격2', size=15)

axes1.legend()
axes1.grid(True)
plt.show()

 

그래프 그리기


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


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

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

  • 그래프를 그리는 두가지 방식
  • pyplot 모듈의 함수들을 사용한다.
  • Figure와 Axes 객체의 메소드들을 사용한다.

pyplot 모듈을 이용해 그리기


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

 

 

# 그래프에 사용할 데이터
x = [1, 2, 3, 4, 5] # x축
y = [10, 20, 30, 40, 50] # y축

 

# import -> alias : plt
import matplotlib.pyplot as plt

# 그래프 그리기. plt모듈의 함수이용.
plt.plot(x, y) # line plot(선그래프)

# 그래프에 대한 설정
plt.title('Lineplot 예제') # 제목
# x, y값의 label
plt.xlabel('X값')
plt.ylabel('Y값')
# grid가 나오도록 처리
plt.grid(True)
# 눈금(ticks) 설정
# x축 눈금
plt.xticks(ticks=range(0,10), # 눈금의 위치
           labels=list('ABCDEFGHIJ') # 각 눈금의 label 지정. ticks와 labels의 개수가 같아야 한다.
          )
# y축 눈금
plt.yticks(ticks=range(10,51,5))

# 그래프를 출력
plt.show()

 

2. 하나의 figure에 여러 그래프 그리기
    - plt.subplot(row,columns,num)

 

import matplotlib.pyplot as plt

plt.figure(figsize=(10,5)) # figure의 크기를 설정. (10 -> 가로길이, 5 -> 세로길이, 단위 : inch)
# axes == subplot (그래프를 그리는 영역). figure에 포함된다.
# 위치 지정
plt.subplot(1, 2, 1) # 위치지정 -> figure를 1행 2열로 나눈다. 그 중 1번(첫번째) subplot에 그린다.
# 그래프 그리기 + 설정
plt.plot(x, y)
plt.title('1번 subplot')
plt.grid(True)

# 위치 지정
plt.subplot(1, 2, 2)
# 그래프 그리기 + 설정
plt.scatter(x, y) # scatter() -> 산점도
plt.title('2번 subplot')

plt.tight_layout() # axes 간의 간격을 알아서 조정.
plt.show()

 

# 하나의 axes에 여러 그래프를 그리기.
plt.figure(figsize=(8, 5))
plt.plot(x, y, label='비례')
plt.plot(x, y[::-1], label='반비례')

plt.legend(loc='center right') # 범례 (그래프에 대한 설명을 붙여준다.), (loc = '~') 위치결정 "상하,좌우"

plt.show()

 

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

  • AxesSubplot 객체(Axes를 표현하는 객체)의 메소드들을 이용해 그래프를 그린다.
  • axes 생성 방법
    • plt.gca(): AxesSubplot
      • 하나의 figure에 하나의 Axes 만 사용할 경우 사용.
    • 하나의 figure에 여러개의 Axes들을 사용할 경우
      • figure.add_subplot() 메소드 이용
        • figure를 먼저 생성후 axes 들을 추가
      • pyplot.subplots() 함수를 이용
        • figure와 axes배열을 동시에 생성

 

Figure에 하나의 axes 그리기
    - plt.gca() 사용

 

axes = plt.gca()
print(type(axes))
axes.plot(x,y)

# 설정 -> set을 앞에 붙인다.
axes.set_title('제목') # plt.title('제목')
axes.set_xticks(ticks=[1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5,5]) # plt.xticks()
axes.set_xlabel('X축 라벨') # plt.xlabel('X라벨')
axes.set_ylabel('Y축 라벨')

axes.grid(True)
plt.show()

 

하나의 Figure에 여러개의 axes 그리기


 1. figure.add_subplot() 메소드 이용
    - figure객체에 axes를 추가하는 형태
    - nrows(총행수), ncols(총열수), index(axes위치) 지정

 

# figure 객체 생성
fig = plt.figure()
print(type(fig))
axes1 = fig.add_subplot(2, 2, 1) # 2 X 2 의 첫번째 위치. 추가한 axes객체를 반환
axes1.plot(x, y)
axes1.set_title('1번 axes')

axes2 = fig.add_subplot(2, 2, 3)
axes2.plot(y, x)
axes2.set_title('2번 axes')

axes3 = fig.add_subplot(1, 2, 2)
axes3.bar(['a', 'b'], [10, 20])
axes3.set_title('3번 axes')

plt.tight_layout()
plt.show()

 

 2. pyplot.subplots()
    - nrows, ncols 로 axes개수와 위치 지정
    - 반환: figure와 axes(subplot)들을 담은 ndarray

 

fig, axes = plt.subplots(2, 2, figsize=(10, 10))
print(type(fig))
print(type(axes), axes.shape)
axes[0, 0].plot(x, y)
axes[0, 1].plot(y, x)
axes[1, 0].plot(x, y[::-1])
axes[1, 1].plot(x, x)
plt.show()

그래프의 색상과 스타일을 변경할 수 있다.

 

fig, axes = plt.subplots(2, 2, figsize=(10, 10))
print(type(fig))
print(type(axes), axes.shape)
axes[0, 0].plot(x, y, color='k')
axes[0, 1].plot(y, x, c='#713B30')
axes[1, 0].plot(x, y[::-1], c='0.5')
axes[1, 1].plot(x, x)
plt.show()
  • Style
  • Style: 그래프의 여러 시각효과들을 미리 설정해 놓은 것
  • matplotlib는 다양한 스타일들을 미리 정의해 놓고 있다.
  • 스타일목록
  • plt.style.use() 함수 이용해 지정
  • plt.style.available
  • 사용할 수 있는 스타일 이름 조회
  • 스타일목록 - Style sheets reference — Matplotlib 3.8.0 documentation
import numpy as np

 

plt.style.use('default') # 원하는 style 입력 default 입력시 원래의 style로 변경
x = np.linspace(1, 10, num=100) # 1 ~ 10 범위를 100등분했을때 분위수를 가지는 배열

plt.plot(x, x+3)
plt.plot(x, x+2)
plt.plot(x, x)
plt.plot(x, x-1)
plt.show()

 

plt.scatter(x, x)
plt.show()