본문 바로가기
실습/파이썬 데이터 분석 및 시각화

Matplotlib 사용법

by 이민우 2021. 11. 17.
728x90
반응형

Matplotlib

 

Matplotlib은 파이썬 과학 계산용 그래프 라이브러리이다.

 

쉽게 말하면 파이썬에서 데이터를 활용해 그래프를 그리는 라이브러리로, 선 그래프, 히스토그램, 산점도 등의 그래프들을 쉽게 그릴 수 있도록 지원되어 데이터 시각화에 많이 사용된다.

import matplotlib.pyplot as plt

 

 

Figure과 Subplot

 

Matplotlib을 활용해 그래프를 그리기 위해서는 다음의 두 가지가 필요하다.

  • Figure : 그래프를 그릴 수 있는 영역
  • Subplot : 실제 그래프가 그려지는 영역
import matplotlib.pyplot as plt
import random

fig = plt.figure()
ax = fig.add_subplot(111) #행번호, 열번호, 그림번호

data = list()
for i in range(10) :
  data.append(random.randrange(0, 10));

ax.plot(data)
plt.show()

*plot은 꺾은선 그래프

 

 

 

Figure은 종이, Subplot은 종이를 여러 등분으로 나누는 것이라고 생각할 수 있다.

즉, 하나의 Figure에 여러 개의 Subplot을 선언하여 여러 그래프를 하나의 Figure에서 보여줄 수 있다.

import matplotlib.pyplot as plt
import random

fig = plt.figure()
ax1 = fig.add_subplot(221) #2행, 2열 중 1번째 그래프
ax2 = fig.add_subplot(222) #2행, 2열 중 2번째 그래프
ax3 = fig.add_subplot(223) #2행, 2열 중 3번째 그래프

data1 = list()
data2 = list()
data3 = list()
for i in range(10) :
  data1.append(random.randrange(0, 10));
  data2.append(random.randrange(0, 10));
  data3.append(random.randrange(0, 10));

ax1.plot(data1)
ax2.plot(data2)
ax3.plot(data3)

plt.show()

 

plot 함수는 기본적으로 선 그래프를 그려주는데,

굳이 저렇게 여러 Subplot에 그리지 않고 한 그래프에 그리는 것도 가능하다.

import matplotlib.pyplot as plt
import random

fig = plt.figure()
ax1 = fig.add_subplot(221) #2행, 2열 중 1번째 그래프

data1 = list()
data2 = list()
data3 = list()
for i in range(10) :
  data1.append(random.randrange(0, 10));
  data2.append(random.randrange(0, 10));
  data3.append(random.randrange(0, 10));

ax1.plot(data1, color='g')
ax1.plot(data2, color='r')
ax1.plot(data3, color='b')

plt.show()

plt.plot(
    df[x],
    df[y],
    marker = 'o',
    markersize=10,
    color='red'
)

 

 

plot 설정

아래와 같은 옵션을 사용하면 plot에 대한 다양한 설정이 가능하다.

#그래프 옵션
#그래프크기
plt.figure(figsize = (14, 5)) #x, y 순

#그래프 이름
plt.title('')

#x축 이름
plt.xlabel('', size=20)

#y축 이름
plt.ylabel('', size=20)

#x축 라벨 크기, 회전 설정
plt.xticks(size = 20, rotation=45)

#범례 표시
plt.legend(labels=[''], loc='best', fontsize = 15)

 

산점도 그래프

데이터들을 좌표상에 점으로 표현하는 그래프이다.

주로 회귀분석 같은 상황에서 데이터의 특징이나 패턴을 찾기 위해 사용되는 그래프이다.

 

Matplotlib에서는 scatter 함수를 사용해 쉽게 구현이 가능하다.

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax1 = fig.add_subplot(111)

x = np.random.rand(10)*10 #0~9의 10개의 랜덤 수 생성
y = np.random.rand(10)*10

ax1.scatter(x, y) #산포도 그래프

plt.show()

 

마찬가지로 같은 그래프 안에서 여러 데이터의 표현도 가능하다.

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax1 = fig.add_subplot(221) #2행, 2열 중 1번째 그래프

x1 = np.random.rand(10)*10 #0~9의 10개의 랜덤 수 생성
y1 = np.random.rand(10)*10
x2 = np.random.rand(10)*10 
y2 = np.random.rand(10)*10 
x3 = np.random.rand(10)*10 
y3 = np.random.rand(10)*10

ax1.scatter(x1, y1, color='g')
ax1.scatter(x2, y2, color='r')
ax1.scatter(x3, y3, color='b')

plt.show()

 

 

막대 그래프

사물의 양을 막대 모양의 길이로 나타낸 그래프이다. 데이터의 양을 한 눈에 이해할 수 있기에 가독성 면에서 좋은 그래프이다.

주로 불연속적 자료를 나타내는 데 사용된다.

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax1 = fig.add_subplot(111)

x = np.arange(1, 11) #1~10
y = np.random.rand(10)*10 #0~10의 10개의 랜덤 수 생성

ax1.bar(x, y) #막대 그래프

plt.show()

 

만약 숫자 라벨이 아닌 특정한 라벨이 필요하다면 아래의 방법으로 라벨 지정이 가능하다.

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax1 = fig.add_subplot(111)

x = np.arange(1, 11) #1~10
y = np.random.rand(10)*10 #0~10의 10개의 랜덤 수 생성
labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

ax1.bar(x, y, tick_label=labels) #막대 그래프

plt.show()

 

legend를 추가하는 방법은 다음과 같다.

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax1 = fig.add_subplot(111)

x = np.arange(1, 11) #1~10
y1 = np.random.rand(10)*10 #0~10의 10개의 랜덤 수 생성
y2 = np.random.rand(10)*10
y3 = np.random.rand(10)*10

labels = ['A', 'B', 'C']

ax1.bar(x, y1, label=labels[0])
ax1.bar(x, y2, label=labels[1])
ax1.bar(x, y3, label=labels[2])
ax1.legend()

plt.show()

 

 

 

 

Boxplot 차트

수치적 자료를 표현하는 데 사용되는 그래프로, 자료로부터 얻어낸 다섯 가지 요약 수치를 그림으로 나타낸다.

  • 최소값
  • 제 1 사분위
  • 제 2 사분위
  • 제 3 사분위
  • 최대값

 

boxplot 함수를 사용하면 쉽게 구현할 수 있다.

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax1 = fig.add_subplot(111)

x1 = np.random.rand(10)*10 #0~10의 10개의 랜덤 수 생성
x2 = np.random.rand(10)*10 #0~10의 10개의 랜덤 수 생성
x3 = np.random.rand(10)*10 #0~10의 10개의 랜덤 수 생성

ax1.boxplot([x1, x2, x3])

plt.show()

 

 

 

파이 차트

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax1 = fig.add_subplot(111)

x1 = np.random.rand(1)*10 #0~10의 1개의 랜덤 수 생성
x2 = np.random.rand(1)*10 #0~10의 1개의 랜덤 수 생성
x3 = np.random.rand(1)*10 #0~10의 1개의 랜덤 수 생성

labels = ['A', 'B', 'C'];

ax1.pie([x1, x2, x3], labels=labels)

plt.show()

 

 

 

 

Matplotlib에서 한글 폰트 사용하기.

 

기본적으로 Matplotlib은 한글을 지원하지 않는다.

만약 한글을 포함할 경우 아래와 같이 오류가 출력될 수 있다.

그러나 그래프를 보여줄 때 한글을 사용해야할 경우가 있는데,

이런 경우 Matplotlib을 사용하기 위해서는 한글 포트를 수동으로 지정해주어야 한다.

 

한글 폰트는 윈도우10을 기준으로 다음 폴더에 들어있다.

 

로컬에서 실행한다면 곧바로 해당 폴더를 지정해주면 된다.

Matplotlib의 폰트 지정 방법은 아래와 같다.

import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import matplotlib

font_location = "C/Windows/Fonts/batang.ttc"
font_name = fm.FontProperties(fname = font_location).get_name()
matplotlib.rc('font', family = font_name)

#사용 예시
fig = plt.figure()
ax1 = fig.add_subplot(111)

x1 = 1
x2 = 2
x3 = 3

ax1.pie([x1, x2, x3])

ax1.set_title('그래프이름', fontproperties = font_name)
ax1.set_xlabel('엑스', fontproperties = font_name)
ax1.set_ylabel('와이', fontproperties = font_name)

plt.show()

 

 

하지만 나처럼 코랩에서 하는 경우는 다음 포스팅을 따라하면 된다.

https://teddylee777.github.io/colab/colab-korean

 

구글 코랩(colab) 한글 깨짐 현상 해결방법

구글 코랩(colab) 한글 깨짐 현상 해결방법에 대해 알아보겠습니다.

teddylee777.github.io

 

728x90
반응형

'실습 > 파이썬 데이터 분석 및 시각화' 카테고리의 다른 글

Nltk_영어 텍스트 분석  (0) 2021.11.18
Konlpy_한글 텍스트 분석  (0) 2021.11.18
Bokeh 패키지  (0) 2021.11.17
Seaborn 사용법  (0) 2021.11.17
Pandas 사용법  (0) 2021.11.17