Matplotlib Tips

이혜빈·2022년 11월 3일
0

혼란한 Matplotlib에서 질서 찾기, 이제현 - Pycon Korea 2022 <- 정리하기

라이브러리 로드

import matplotlib.pyplot as plt
import seaborn as sns

import pandas as pd
import numpy as np

Seaborn으로 사전 환경 설정하기

  • 맨 처음에 한번만 설정하면 된다.
  • matplotlib에도 style기능이 있지만, seaborn 추천
    why? 속성 별로 설정을 다르게 할 수 있기 때문

데이터 불러오기

seaborn의 penguins 데이터셋을 이용한다.

df_peng = sns.load_dataset("penguins")

X, Y = df_peng["bill_length_mm"], df_peng["bill_depth_mm"]

Matplotlib의 scatter

plt.scatter(X, Y)

구성요소의 배율 설정

sns.set_context("talk") <--- new!
plt.scatter(x, y)

배색 설정

sns.set_context("talk")
sns.set_palette("Set2") <--- new!
plt.scatter(x, y)

눈금, 배경, 격자 설정

sns.set_context("talk")
sns.set_palette("Set2")
sns.set_style("whitegrid") <--- new!
plt.scatter(x, y)

환경 설정 초기화

from matplotlib.pyplot import style

style.use('default')

Matplotlib에서 그림을 그리는 두 가지 방식

※ 유튜브 이미지를 스크린샷해서 가져왔다.

임의의 데이터셋 만들기

강의랑 같은 데이터셋을 찾아보려고 했는데 못찾았다..
x = np.sort(np.random.randint(-2, 4, 10))
power = np.sort(np.random.randint(0, 15, 10))
torque = np.sort(np.random.uniform(0, 1, 10))

print(x)
print(power)
print(torque)

상태 기반 방식

  • 순서대로 그리는 방식
  • 공간 제어를 코드 순서와 일치시켜야 한다 => 위 아래를 오가면서 코딩해야 한다.
  • 코드가 체계를 갖추기 어렵고 나열식 코드가 될 수밖에 없다.
  • 간단하고 빠르게 형상만 확인하기에 유리
plt.figure(figsize=(8, 4))

plt.subplot(121)
plt.plot(x, power, marker="o", ms=10, label="power")
plt.xlabel("time")
plt.ylabel("output")
plt.legend() # 범례 추가

plt.subplot(122)
plt.plot(x, torque, ls=":", label="torque")
plt.xlabel("time")
plt.legend()

plt.suptitle("performance")
plt.subplots_adjust(wspace=0.1)
plt.tight_layout()

객체 지향 방식

  • 대상을 지정해 그리는 방식
  • 레이아웃 전체를 처음 한번에 정의하고 시작
  • 결과물의 일부를 수정하기 유리하다.
  • for문 사용 가능
  • fig(figure) : 전체 공간
  • axs(axes) : 데이터가 표현되는 공간
  • 논리에 따른 코딩 => 재사용 & 유지보수 유리
  • Matplotlib 생태계 활용 가능
fig, axs = plt.subplots(ncols=2, figsize=(8, 4), gridspec_kw={"wspace":0.1}, constrained_layout=True)

# 대상 지정 시각화 
axs[0].plot(x, power, marker="o", ms=10, label="power")
axs[1].plot(x, torque, ls=":", label="torque")

# 반복문 활용
for ax in axs:
    ax.set_xlabel("time")
    ax.legend()
    
# 하위 객체 추가
axs[0].set_ylabel("output")

fig.suptitle("performance")

profile
안녕하세요

0개의 댓글