Matplotlib.pyplot 기본 튜토리얼, 스타일, 캔버스
Apr 3, 2020

본 튜토리얼은 matplotlib의 가장 기본적인 튜토리얼을 제공합니다.

다양한 옵션값과 스타일 기본 설정법을 배울 수 있습니다.

matplotlib.pyplot의 기본적인 canvas 그리기와 스타일링 예제

In [1]:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
In [2]:
plt.rc('font', family='NanumBarunGothic') 
plt.rcParams["figure.figsize"] = (12, 9)

1. 밑 그림 그리기

1-1. 단일 그래프

In [3]:
## data 생성
data = np.arange(1, 100)
## plot
plt.plot(data)
## 그래프를 보여주는 코드
plt.show()

1-2. 다중 그래프 (multiple graphs)

1개의 canvas 안에 다중 그래프 그리기

In [4]:
data = np.arange(1, 51)
plt.plot(data)

data2 = np.arange(51, 101)
# plt.figure()
plt.plot(data2)

plt.show()

2개의 figure로 나누어서 다중 그래프 그리기

  • figure()는 새로운 그래프 canvas를 생성합니다.
In [5]:
data = np.arange(100, 201)
plt.plot(data)

data2 = np.arange(200, 301)
# figure()는 새로운 그래프를 생성합니다.
plt.figure()
plt.plot(data2)

plt.show()

1-3. 여러개의 plot을 그리는 방법 (subplot)

subplot(row, column, index)

In [6]:
data = np.arange(100, 201)
plt.subplot(2, 1, 1)
plt.plot(data)

data2 = np.arange(200, 301)
plt.subplot(2, 1, 2)
plt.plot(data2)

plt.show()

위의 코드와 동일하나 , (콤마)를 제거한 상태

In [7]:
data = np.arange(100, 201)
# 콤마를 생략하고 row, column, index로 작성가능
# 211 -> row: 2, col: 1, index: 1
plt.subplot(211)
plt.plot(data)

data2 = np.arange(200, 301)
plt.subplot(212)
plt.plot(data2)

plt.show()
In [8]:
data = np.arange(100, 201)
plt.subplot(1, 3, 1)
plt.plot(data)

data2 = np.arange(200, 301)
plt.subplot(1, 3, 2)
plt.plot(data2)

data3 = np.arange(300, 401)
plt.subplot(1, 3, 3)
plt.plot(data3)

plt.show()

1-4. 여러개의 plot을 그리는 방법 (subplots) - s가 더 붙습니다.

plt.subplots(행의 갯수, 열의 갯수)

In [9]:
# data 생성
data = np.arange(1, 51)

# 밑 그림
fig, axes = plt.subplots(2, 3)

axes[0, 0].plot(data)
axes[0, 1].plot(data * data)
axes[0, 2].plot(data ** 3)
axes[1, 0].plot(data % 10)
axes[1, 1].plot(-data)
axes[1, 2].plot(data // 20)

plt.tight_layout()
plt.show()

2. 주요 스타일 옵션

In [10]:
from IPython.display import Image

# 출처: matplotlib.org
Image('https://matplotlib.org/_images/anatomy.png')
Out[10]:

2-1. 타이틀

In [11]:
plt.plot([1, 2, 3], [3, 6, 9])
plt.plot([1, 2, 3], [2, 4, 9])
# 타이틀 & font 설정
plt.title('이것은 타이틀 입니다')

plt.show()
In [12]:
plt.plot([1, 2, 3], [3, 6, 9])
plt.plot([1, 2, 3], [2, 4, 9])
# 타이틀 & font 설정
plt.title('타이틀 fontsize를 키웁니다', fontsize=20)

plt.show()

2-2. X, Y축 Label 설정

In [13]:
plt.plot([1, 2, 3], [3, 6, 9])
plt.plot([1, 2, 3], [2, 4, 9])

# 타이틀 & font 설정
plt.title('Label 설정 예제입니다', fontsize=20)

# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)

plt.show()

2-3. X, Y 축 Tick 설정 (rotation)

Tick은 X, Y축에 위치한 눈금을 말합니다.

In [14]:
plt.plot(np.arange(10), np.arange(10)*2)
plt.plot(np.arange(10), np.arange(10)**2)
plt.plot(np.arange(10), np.log(np.arange(10)))

# 타이틀 & font 설정
plt.title('X, Y 틱을 조정합니다', fontsize=20)

# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)

# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)

plt.show()
/opt/conda/lib/python3.6/site-packages/ipykernel_launcher.py:3: RuntimeWarning: divide by zero encountered in log
  This is separate from the ipykernel package so we can avoid doing imports until

2-4. 범례(Legend) 설정

In [15]:
plt.plot(np.arange(10), np.arange(10)*2)
plt.plot(np.arange(10), np.arange(10)**2)
plt.plot(np.arange(10), np.log(np.arange(10)))

# 타이틀 & font 설정
plt.title('범례 설정 예제입니다', fontsize=20)

# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)

# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)

# legend 설정
plt.legend(['10 * 2', '10 ** 2', 'log'], fontsize=15)

plt.show()
/opt/conda/lib/python3.6/site-packages/ipykernel_launcher.py:3: RuntimeWarning: divide by zero encountered in log
  This is separate from the ipykernel package so we can avoid doing imports until

2-5. X와 Y의 한계점(Limit) 설정

xlim(), ylim()

In [16]:
plt.plot(np.arange(10), np.arange(10)*2)
plt.plot(np.arange(10), np.arange(10)**2)
plt.plot(np.arange(10), np.log(np.arange(10)))

# 타이틀 & font 설정
plt.title('이것은 타이틀 입니다', fontsize=20)

# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)

# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)

# legend 설정
plt.legend(['10 * 2', '10 ** 2', 'log'], fontsize=15)

# x, y limit 설정
plt.xlim(0, 5)
plt.ylim(0.5, 10)

plt.show()
/opt/conda/lib/python3.6/site-packages/ipykernel_launcher.py:3: RuntimeWarning: divide by zero encountered in log
  This is separate from the ipykernel package so we can avoid doing imports until

2-6. 스타일 세부 설정 - 마커, 라인, 컬러

스타일 세부 설정은 마커, 선의 종류 설정, 그리고 컬러가 있으며, 문자열로 세부설정을 하게 됩니다.

marker의 종류

  • '.' 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
  • 's ' square marker
  • 'p' pentagon marker
  • '*' star marker
  • 'h' hexagon1 marker
  • 'H' hexagon2 marker
  • '+' plus marker
  • 'x' x marker
  • 'D' diamond marker
  • 'd' thin_diamond marker
  • '|' vline marker
  • '_' hline marker
In [17]:
plt.plot(np.arange(10), np.arange(10)*2, marker='o', markersize=5)
plt.plot(np.arange(10), np.arange(10)*2 - 10, marker='v', markersize=10)
plt.plot(np.arange(10), np.arange(10)*2 - 20, marker='+', markersize=15)
plt.plot(np.arange(10), np.arange(10)*2 - 30, marker='*', markersize=20)

# 타이틀 & font 설정
plt.title('마커 설정 예제', fontsize=20)

# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)

# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)

plt.show()

line의 종류

  • '-' solid line style
  • '--' dashed line style
  • '-.' dash-dot line style
  • ':' dotted line style
In [18]:
plt.plot(np.arange(10), np.arange(10)*2, marker='o', linestyle='')
plt.plot(np.arange(10), np.arange(10)*2 - 10, marker='o', linestyle='-')
plt.plot(np.arange(10), np.arange(10)*2 - 20, marker='v', linestyle='--')
plt.plot(np.arange(10), np.arange(10)*2 - 30, marker='+', linestyle='-.')
plt.plot(np.arange(10), np.arange(10)*2 - 40, marker='*', linestyle=':')

# 타이틀 & font 설정
plt.title('다양한 선의 종류 예제', fontsize=20)

# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)

# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)

plt.show()

color의 종류

  • 'b' blue
  • 'g' green
  • 'r' red
  • 'c' cyan
  • 'm' magenta
  • 'y' yellow
  • 'k' black
  • 'w' white
In [19]:
plt.plot(np.arange(10), np.arange(10)*2, marker='o', linestyle='-', color='b')
plt.plot(np.arange(10), np.arange(10)*2 - 10, marker='v', linestyle='--', color='c')
plt.plot(np.arange(10), np.arange(10)*2 - 20, marker='+', linestyle='-.', color='y')
plt.plot(np.arange(10), np.arange(10)*2 - 30, marker='*', linestyle=':', color='r')

# 타이틀 & font 설정
plt.title('색상 설정 예제', fontsize=20)

# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)

# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)

plt.show()
In [20]:
plt.plot(np.arange(10), np.arange(10)*2, color='b', alpha=0.1)
plt.plot(np.arange(10), np.arange(10)*2 - 10, color='b', alpha=0.3)
plt.plot(np.arange(10), np.arange(10)*2 - 20, color='b', alpha=0.6)
plt.plot(np.arange(10), np.arange(10)*2 - 30, color='b', alpha=1.0)

# 타이틀 & font 설정
plt.title('투명도 (alpha) 설정 예제', fontsize=20)

# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)

# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)

plt.show()

2-7. 그리드 설정

In [21]:
plt.plot(np.arange(10), np.arange(10)*2, marker='o', linestyle='-', color='b')
plt.plot(np.arange(10), np.arange(10)*2 - 10, marker='v', linestyle='--', color='c')
plt.plot(np.arange(10), np.arange(10)*2 - 20, marker='+', linestyle='-.', color='y')
plt.plot(np.arange(10), np.arange(10)*2 - 30, marker='*', linestyle=':', color='r')

# 타이틀 & font 설정
plt.title('그리드 설정 예제', fontsize=20)

# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)

# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)

# grid 옵션 추가
plt.grid()

plt.show()


관련 글 더보기

- Seaborn의 통계 차트 및 데이터 시각화 예제

- Matplotlib을 활용한 데이터 시각화 그래프 예제

- 2019년 KBO 관객수를 크롤링하여 matplotlib으로 시각화 해보겠습니다

- Ubuntu의 Docker환경에서 matplotlib 한글폰트 설치 및 적용

- Tree기반 모델(DecisionTree, RandomForest)의 분할 그래프 시각화하기 (graphviz)

데이터 분석, 머신러닝, 딥러닝의 대중화를 꿈 꿉니다.