subplot? add_subplot? subplots?

시작하기



이번에는 파이썬 라이브러리인 matplotlib를 사용했을 때 subplot, subplots, plot 등으로 막혔기 때문에 그 차이를 이야기해 나가려고 합니다.

1.plt.figure()



가장 많이 보는 것이 이 쓰는 방법이라고 생각합니다.
import numpy as np
import matplotlib.pyplot as plt

plt.figure(figsize=(4,4))
plt.plot([0,2,5,6], label="graph")
plt.xlabel("x座標")
plt.ylabel("y座標")
plt.legende()
plt.show()



또, 그래프를 거듭하고 싶은 경우 이하와 같이 쓰면 거듭할 수 있습니다.
x = np.linspace(-2,5)
y1 = x ** 2
y2 = 2 * x
plt.figure(figsize=(6,6))
plt.plot(x, y1, label="x^2")
plt.plot(x, y2, label="2x")
plt.legend()
plt.show()


plt.figure() 를 실행하면 그릴 영역을 확보할 수 있습니다. 이 때 figsize=(横の長さ, 縦の長さ)를 지정하여 얼마나 큰 영역을 확보할지 지정할 수 있습니다. 이 확보한 에리어에 함수 등을 그려갑니다. 그래프를 추가하면 같은 영역에 겹치도록 그려집니다. 그렇다면 겹치지 않고 그리기를 원한다면 어떻게해야합니까?

2.plt.subplot()



그래프를 겹치지 않고 세로 또는 가로로 나란히 그리고 싶은 경우는 plt.subplot() 를 사용합니다.
x = np.linspace(-np.pi, np.pi)

plt.figure(figsize=(12,4))

plt.subplot(1,3,1) #1×3の要素の内に1番目の要素に配置する
plt.plot(x,np.sin(x), label="sinx")
plt.xlabel("xaxis")
plt.ylabel("yaxis")
plt.title("sin")
plt.legend()

plt.subplot(1,3,2)#1×3の要素の内に2番目の要素に配置する
plt.plot(x,np.cos(x), label="cosx")
plt.xlabel("xaxis")
plt.ylabel("yaxis")
plt.title("sin")
plt.legend()

plt.subplot(1,3,3)#1×3の要素の内に3番目の要素に配置する
plt.plot(x,np.tan(x), label="tanx")
plt.xlabel("xaxis")
plt.ylabel("yaxis")
plt.title("sin")
plt.legend()
plt.tight_layout()


plt.figure(figsize=(12,4)) 에서 12×4의 영역을 확보합니다. plt.subplot(1,3,1) 에서 12×4의 영역을 옆으로 3등분한 것 중 왼쪽에서 1번째의 영역에 그립니다. 즉 plt.subplot() 는 확보한 에리어를 몇개의 요소로 분할해, 그 요소의 몇번째로 기술할지를 지정할 수 있습니다. 그러나 이 글에서는 매번 타이틀이나 x라벨 등의 요소를 지정해야 하기 때문에 조금 번거롭습니다. 마지막 plt.tight_layout() 는 그래프끼리가 겹치지 않게 하기 위해서 추가하고 있습니다. 또한 다음과 같은 쓰기 방법으로도 할 수 있습니다.
x = np.linspace(-2,2)
y_exp = np.exp(x)
y_log = np.log(x)

fig = plt.figure(figsize=(12,4))
ax1 = fig.add_subplot(1,2,1)
ax1.plot(x,y_exp)
ax1.set_xlabel("xaxis")

ax2 = fig.add_subplot(1,2,2)
ax2.plot(x,y_log)
ax2.set_xlabel("xaxis")


이 경우 쓰는 방법도 조금 번잡합니다.

3.plt.subplots()



이 방법은 이상과 같은 쓰기 방법으로 문제가 된 번잡함을 해결해줍니다.
x = np.linspace(-2,2)
y1 = np.sin(np.exp(x))
y2 = np.exp(np.sin(x))
y3 = np.sin(np.cos(x))

fig, ax = plt.subplots(1, 3, figsize=(14,3))
ax[0].plot(x,y1)
ax[1].plot(x,y2)
ax[2].plot(x,y3)

for i in range(3):
  ax[i].set_xlabel("x axis")
  ax[i].set_ylabel("y axis")
plt.tight_layout()

plt.subplots() 로 그리는 영역의 확보와 그 영역을 몇 분할할까를 한 번에 지정할 수 있습니다. 이상과 같은 쓰는 방법을 하는 것으로 깔끔한 코드로 그래프를 확보할 수 있습니다.

끝에



지금까지 matplolib은 데이터 분석에서 매우 활약하므로 제대로 사용할 수 있도록 해 둡시다! 좋은 데이터 분석 생활을!

참고문헌


  • matplotlib 공식 문서
  • matplotlib 도면
  • 좋은 웹페이지 즐겨찾기