티스토리 뷰

개발공부/🎅 Python

[Python] Matplotlib 데이터 시각화

2022. 9. 28. 15:21

1️⃣  Matplotlib 소개

 

파이썬에서 데이터를 그래프나 차트로 시각화할 수 있는 라이브러리

 

 

그래프 그려보기

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]

plt.plot(x, y)

 

 

 

그래프 제목, 라벨 작성하기

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]

plt.plot(x, y)
plt.title("First Plot")
plt.xlabel("x")
plt.ylabel("y")

 

 

 

 

subplots

 

-  보통 여러 개의 그래프를 그릴 때 사용한다.

-  figure와 axes를 직접 생성한다.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]

fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title("First Plot")
ax.set_xlabel("x")
ax.set_ylabel("y")

 

 

 

 

 

Matplotlib 구조

 

이미지출처 : 엘리스 파이썬으로 시작하는 데이터 분석 - Matplotlib 데이터 시각화 강의자료

 

 

 

 

그래프 저장하기

x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]

fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title("First Plot")
ax.set_xlabel("x")
ax.set_ylabel("y")
fig.set_dip(300)

fig.savefig("first_plot.png")

 

 

 

 

여러 개의 그래프 그리기

x = np.linspace(0, np.pi*4, 100)
fig, axes = plt.subplots(2, 1)
axes[0].plot(x, np.sin(x))
axes[1].plot(x, np.cos(x))

 

 

 

 

 

 

2️⃣ Matplotlib 그래프

 

Line plot

fig, ax = plt.subplots()
x = np.arange(15)
y = x ** 2
ax.plot(
    x, y,
    linestyle=":",
    marker="*",
    color="#524FA1" 
)

 

 

 

-  Line style

x = np.arange(10)
fig, ax = plt.subplots()

ax.plot(x, x, linestyle="-")	# solid
ax.plot(x, x+2, linestyle="--")	# dashed
ax.plot(x, x+4, linestyle="-.")	# dashdot
ax.plot(x, x+6, linestyle=":")	# dotted

 

 

 

-  Color

x = np.arange(10)
fig, ax = plt.subplots()

ax.plot(x, x, color="r")
ax.plot(x, x+2, color="green")
ax.plot(x, x+4, color='0.8')
ax.plot(x, x+6, color="#524FA1")

 

 

 

-  Marker

x = np.arange(10)
fig, ax = plt.subplots()

ax.plot(x, x, marker=".")	# 점
ax.plot(x, x+2, marker="o")	# 원
ax.plot(x, x+4, marker='v')	# 삼각형
ax.plot(x, x+6, marker="s") # 사각형
ax.plot(x, x+8, marker="*") # 별

 

기호 의미 기호 의미
. , 픽셀
o s 사각형
v, <, ^, > 삼각형 1, 2, 3, 4 삼각선
p 오각형 H, h 육각형

 

 

 

 

 

-  축 경계 조정하기 (x축 시작-끝, y축 시작-끝)

x = np.linspace(0, 10, 1000)
fig, ax = plt.subplots()

ax.plot(x, np.sin(x))
ax.set_xlim(-2, 12)
ax.set_ylim(-1.5, 1.5)

 

 

 

-  범례

fig, ax = plt.subplots()
ax.plot(x, x, label='y=x')
ax.plot(x, x**2, label='y=x^2')
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.legend(
    loc='upper right',
    shadow=True,
    fancybox=True,
    borderpad=2
)

 

 

 

 

 

 

3️⃣  Scatter (산점도)

 

-  값 사이의 관계를 파악하기 용이해지고 데이터 셋에서 이상값을 찾기도 용이하다.

-  둘 이상의 측정값의 상관 관계를 파악하고 시각화 할 수 있다.

 

fig, ax = plt.subplots()
x = np.arange(10)
ax.plot(
    x, x**2, "o",
    markersize=15,
    markerfacecolor='white',
    markeredgecolor="blue"
)

 

 

 

-  사이즈, 컬러 옵션

fig, ax = plt.subplots()
x = np.random.randn(50) 
y = np.random.randn(50)
colors = np.random.randint(0, 100, 50)
sizes = 500 * np.pi * np.random.rand(50) ** 2
ax.scatter(x, y, c=colors, s=sizes, alpha=0.3)

 

 

 

 

 

 

4️⃣  Bar & Histogram

 

-  여러 값을 비교하는데 적합하다.

-  여러개의 값을 입력 받고 그 값들을 한눈에 비교 할 수 있다.

 

x = np.arange(10)
fig, ax = plt.subplots(figsize=(12, 4))
ax.bar(x, x*2)

 

 

 

 

-  누적된 막대그래프 그리기

x = np.random.rand(3)
y = np.random.rand(3)
z = np.random.rand(3)
data = [x, y, z]

fig, ax = plt.subplots()
x_ax = np.arange(3)
for i in x_ax:
    ax.bar(x_ax, data[i],
    bottom=np.sum(data[:i], axis=0))
    
ax.set_xticks(x_ax)
ax.set_xticklabels(["A", "B", "C"])

 

 

 

 

Histogram

 

일정 시간 동안의 숫자 데이터 분포를 시각화 하는데 적합하다.

fig, ax = plt.subplots()
data = np.random.randn(1000)
ax.hist(data, bins=50)

 

 

 

 

💡  matplotlib 의 pyplot으로 그래프를 그릴 때 기본 폰트는 한글을 지원하지 않는다.

아래와 같이 한글 지원 폰트로 직접 바꾸어주면 한글을 사용할 수 있다.

import matplotlib.font_manager as fm

fname='./NanumBarunGothic.ttf'
font = fm.FontProperties(fname = fname).get_name()
plt.rcParams["font.family"] = font

 

 

 

 

 

 

5️⃣  Matplotlib with Pandas

 

예시1)  line plot

df = pd.read_csv("./president_heights.csv")

fig, ax = plt.subplots()
ax.plot(df["order"], df["height(cm)"], label="height")
ax.set_xlabel("order")
ax.set_ylabel("height(cm)")

 

 

 

예시2)  scatter

fire = df[(df['Type 1']=='Fire') | ((df['Type 2'])=="Fire")]
water = df[(df['Type 1']=='Water') | ((df['Type 2'])=="Water")]

fig, ax = plt.subplots()
ax.scatter(fire['Attack'], fire['Defense’], color='R', label='Fire', marker="*", s=50)
ax.scatter(water['Attack'], water['Defense’], color='B', label="Water", s=25)
ax.set_xlabel("Attack")
ax.set_ylabel("Defense")
ax.legend(loc="upper right")

 

 

 

 


 이 글은 엘리스의 AI트랙 5기 강의를 들으며 정리한 내용입니다.

반응형
프로필사진
개발자 삐롱히

프론트엔드 개발자 삐롱히의 개발 & 공부 기록 블로그