파이썬/라이브러리(API)

파이썬 시각화하기 - 맷플롯리브(matplotlib) 라이브러리 기초

코데방 2024. 3. 7.
728x90

matplotlib 사용준비

 

기초에서는 Matplotlib의 서브 패키지인 pyplot을 주로 사용합니다. "plt"라는 명칭으로 알려져있습니다.

테스트용 데이터셋을 받기위해 seaborn 라이브러리를, 데이터를 다루기 위해 pandas를 같이 사용하도록 합니다. 서로 연동도 잘 되어 있습니다. 

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

 

 

 

일단 테스트 데이터를 로드해줍니다. seaborn 라이브러리에서 제공하는 "anscombe" 데이터를 사용해봅니다.

anscombe = sns.load_dataset("anscombe")

 

 

 

편의를 위해 구분자인 "dataset" 별로 데이터를 나눠서 저장해줍니다.

anscombe = sns.load_dataset("anscombe")

data1 = anscombe[anscombe["dataset"] == "I"]
data2 = anscombe[anscombe["dataset"] == "II"]
data3 = anscombe[anscombe["dataset"] == "III"]
data4 = anscombe[anscombe["dataset"] == "IV"]

 

 

 

 

 

matplotlib로 그래프 그릴 준비하기

 

일단 커다란 도화지를 그려두고 그 안에 몇 개의 그래프를 그려줄지 설정해줍니다. 

# 도화지 준비
fig = plt.figure()
#메인 제목 설정
fig.suptitle("matplotlib")

 

 

 

"fig"라는 하나의 도화지 안에 몇 개의 그래프를 그려줄지 설정해줍니다. 2행 2열로 4개의 그래프를 만들어보겠습니다. 

# 2행 2열의 그래프 공간 마련해주기
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)

 

 

 

각각의 그래프에 제목을 부여할 수 있습니다. 그리고 글자가 겹치는 부분이 발생한다면 쉽게 해결할 수 있습니다.

#각 그래프에 이름 부여하기
ax1.set_title("Data1")
ax2.set_title("Data2")
ax3.set_title("Data3")
ax4.set_title("Data4")

#글자가 겹치는 부분 제거
fig.tight_layout()

 

 

 

 

matplotlib 그래프 그리기

 

먼저 점그래프인 scatter를 그려보겠습니다. 줄 수 있는 옵션값들이 엄청 많은데 일단 컬러(c)만 넣었습니다.

ax1.scatter(data1['x'], data1['y'], c = "b")
ax2.scatter(data2['x'], data2['y'], c = "b")
ax3.scatter(data3['x'], data3['y'], c = "b")
ax4.scatter(data4['x'], data4['y'], c = "b")

fig

 

 

 

 

같은 도화지에 그래프를 추가하면 겹쳐서 그려줍니다. 기본 선 그래프인 라인플롯(plot)을 그려봅니다.

ax1.plot(data1['x'], data1['y'], c = "r")
ax2.plot(data2['x'], data2['y'], c = "r")
ax3.plot(data3['x'], data3['y'], c = "r")
ax4.plot(data4['x'], data4['y'], c = "r")

fig

 

 

 

 

 

matplotlib 플롯 그래프 옵션

 

옵션값 설명  
c 선 색깔 (color) b
g
r
c
m
y
k
w
blue
green
red
cyan
magenta
yellow
black
white
mec 마커 선 색깔 (marker edge color)
mew 마커 선 굵기 (marker edge width)
mfc 마커 내부 색깔 (marker face color)
lw  선 굵기 (line width)    
ls 선 스타일 (line style)
--  
-.  
 
marker 마커 종류 .  
,   
o
v
^
<
>
1
2
3
4
s
p
*
h
H
+
x
D
d
point marker
pixel marker
circle marker
triangle_down marker
triangle_up marker
triangle_left marker
triangle_right marker
tri_down marker
tri_up marker
tri_left marker
tri_right marke
square marker
pentagon marker
star marker
hexagon1 marker
hexagon2 marker
plus marker
x marker
diamond marker
thin_diamond marker
ms 마커 크기 (marker size)    

 

 

 

 

위 옵션을 전부 사용해보면 아래와 같이 사용해 볼 수 있습니다. 

pic = plt.figure()
ax = pic.add_subplot(1,1,1)
x = [10,20,30,40]
y = [1,3,9,21]
ax.plot(x, y, c="b", mec="g", mew=3, mfc="r", 
        lw=5, ls="--", marker="o", ms=10)

 

 

 

 

산점도(Scatter)의 경우도 아래와 같이 옵션을 줘서 가시성을 높일 수 있습니다.

#산점도
fig = plt.figure()
fig.suptitle("Test")

ax1 = fig.add_subplot(1,1,1)
ax1.set_xlabel("x")
ax1.set_ylabel("y")
ax1.set_title("Scatter")

# 산점도 그리기 (c = 컬러, s = 점의 사이즈, alpha = 투명도)
ax1.scatter(tips["total_bill"], tips["tip"], c = tips["size"], 
            s = tips["size"] * 20, alpha = 0.5)

 

 

 

728x90

댓글

💲 추천 글