본문 바로가기

데이터 분석

3. Matplotlib

Matplotlib

  • 파이썬 기반 시각화 라이브러리
  • 한글에 대한 지원이 완벽하지 않음
  • pandas와 연동이 용이함
  • Matplotlib 공식 홈페이지
 

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

 

Matplotlib 설치

!pip install Matplotlib

 

Matplotlib import

# MATLAB과 비슷하게 명령어 스타일로 동작하는 함수의 모음
import matplotlib.pyplot as plt

 

Matplotlib 사용

plt.plot([y값1, y값2, y값3, ...])
plt.plot([1,2,3,4]) # 리스트의 값들이 y값들이며, x값 [0,1,2,3]을 자동으로 생성
plt.show()

 

plt.plot([x값1, x값2, x값3, ...], [y값1, y값2, y값3, ...])
# 첫번째 리스트는 x값, 두번째 list는 y값
plt.plot([1,2,3,4], [1,4,10,15])
plt.show()

 

numpy와 함께 사용

data = np.arange(1, 100) # 1부터 99까지 ndarray data에 담음
plt.plot(data) # 1 ~ 100 까지 y값으로 등록
plt.show()

 

두개의 선 그래프 나타내기

data1 = np.arange(1, 50) # 1부터 49까지 ndarray인 data1에 담음
plt.plot(data1) # data1 첫번째 y값으로 등록
data2 = np.arange(50, 100) # 50부터 99까지 ndarray인 data2에 담음
plt.plot(data2) # data2 두번째 y값으로 등록
plt.show()

 

여러개의 plot 그리기

subplot

- 여러 개의 subplot을 만들기 위해 사용되는 함수

# rows: 그림 내의 행(row) 수
# columns: 그림 내의 열(column) 수
# no: 현재 서브플롯의 위치를 지정하는 정수 값

subplot(rows, columns, no)

 

data1 = np.arange(1, 50)
plt.subplot(2,1,1) # 2행 1열 첫번째 subplot
plt.plot(data1)

data2 = np.arange(50, 100)
plt.subplot(2,1,2) # 2행 1열 두번째 subplot
plt.plot(data2)

plt.show()

 

# ,로 구분하지 않고 간단하게 사용 가능
data1 = np.arange(0, 100)
plt.subplot(131) # 1행 3열 첫번째 subplot
plt.plot(data1)

data1 = np.arange(0, 100)
plt.subplot(132) # 1행 3열 두번째 subplot
plt.plot(data1)

data1 = np.arange(0, 100)
plt.subplot(133) # 1행 3열 세번째 subplot
plt.plot(data1)

plt.show()

 


스타일 옵션

 

코랩에 나눔체 설치하기

 

1. 해당 코드 실행하기

!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
plt.rc("font", family="NanumBarunGothic")

2. 상단 메뉴 "런타임" 클릭 후, 다시 시작 및 모두 실행

 

옵션 설정하기

# plt.figure : 가로 6인치, 세로 8인치로 설정
plt.figure(figsize=(6,8))
# 선 그래프 그리기
plt.plot([1,2,3], [1,2,3])
plt.plot([1,2,3], [2,4,6])

# plt.title(): 타이틀명: 타이틀, 글씨크기: 30으로 설정
plt.title("타이틀", fontsize=30)
# plt.xlabel(): x축 레이블명: x축, 글씨크기: 20으로 설정
plt.xlabel("X축", fontsize=20)
# plt.ylabel(): y축 레이블명: y축, 글씨크기: 20, rotation=0: y축 레이블이 수직으로 표시되도록 설정
plt.ylabel("y축", fontsize=20, rotation=0)

plt.show()

마커 설정하기

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

plt.title("마커설정", fontsize=30)

# x,y 축은 1~9 까지의 값, color='b': 선의 색상은 파랑색으로 지정, 
# marker='o': 원형 마커를 사용, linestyle='': 선 스타일은 없음
plt.plot(np.arange(10), np.arange(10), color='b', marker='o', linestyle='')

# x축은 1~9 까지의 값, y축은 np.arange(10)*2 값, color='r': 선의 색상은 빨간색으로 지정, 
# marker='v' : 역삼각형 마커를 사용, linestyle='--': 선 스타일은 파선('--')
plt.plot(np.arange(10), np.arange(10)*2, color='r', marker='v', linestyle='--')

# x축은 1~9 까지의 값, y축은 np.arange(10)*3 값, color='y': 선의 색상은 노란색 지정, 
# marker='*' : 별표(*) 마커를 사용, linestyle='-.': 선 스타일은 대시 점선('-.')
plt.plot(np.arange(10), np.arange(10)*3, color='y', marker='*', linestyle='-.')

# plt.legend(): 범례 추가
# loc="lower right": 범례를 그래프의 오른쪽 아래에 위치시킴
# ncol=3: 범례 항목을 3열로 배치
plt.legend(["10", "10*2", "10*3"], fontsize=15, loc="lower right", ncol=3)

plt.xlim(0, 12) # x축의 범위를 0부터 12까지로 설정, x축의 화면이 더 넓게 표시됨
plt.ylim(0, 30) # y축의 범위를 0부터 30까지로 설정, y축의 화면이 더 넓게 표시됨

plt.xticks(rotation=30) #  x축의 눈금 레이블을 30도 회전
plt.yticks(rotation=30) #  y축의 눈금 레이블을 30도 회전

plt.grid() # 그래프에 그리드를 추가, 가시성 향상에 도움됨
plt.show()

 

 

# x축 설정
x = ["파이썬", "데이터분석", "머신러닝", "딥러닝", "컴퓨터비전", "자연어처리"]

# y축 설정
y = [95, 80, 65, 30, 20, 5]

plt.figure(figsize=(8,5))

# plt.bar(): 막대 그래프를 그림
# align="edge" x축 글자가 앞으로 들어옴
# alpha=0.7: 막대 그래프의 투명도를 0.7로 설정
# color="red": 막대 그래프의 색상을 빨간색으로 설정
plt.bar(x, y, align="edge",alpha=0.7, color="red")
plt.title("AI 성적표", fontsize=25)
plt.ylabel("학생점수",rotation=0)
plt.show()

 

x = ["파이썬", "데이터분석", "머신러닝", "딥러닝", "컴퓨터비전", "자연어처리"]
y = [95, 80, 65, 30, 20, 5]

plt.figure(figsize=(8,5))

# plt.barh(): 수평 막대 그래프를 그림
# align="center": 수평 막대 그래프를 y 좌표의 중앙에 정렬
plt.barh(x, y, align="center",alpha=0.7, color="#e35f62")
plt.title("AI 성적표", fontsize=25)
plt.ylabel("학생점수",rotation=0)
plt.show()