파이썬 plt 그림 여러개 간단하게 설정하기 : plt.subplots()
안녕하세요. 이번 포스팅에서는
파이썬 matplotlib 라이브러리에서 그래프 여러개를 한 화면에 동시에 나타내고,
각 그래프의 세부 사항들을 손쉽게 설정할 수 있는 간단한 방법을 살펴보겠습니다.
다중 플롯 격자 생성, figure 크기 및 여백 정하기
우선, 가장 먼저 subplot 여러개를 그리기 위한 격자를 생성해보겠습니다.
예를들어, 세로 3개, 가로 4개 사이즈의 격자를 만들고 싶다면 아래와 같이
코드를 작성해주시면 됩니다.
plt.subplots() 함수 내에 y, x 방향으로 몇 개의 격자를 만들 것인지를 지정하면
다양한 형태의 격자를 만들 수 있습니다.
f, axes로 각각 figure 전체를 컨트롤하는 변수와 그래프 각각을 조절할 수 있는 변수
2가지를 받아왔습니다.
이제 격자의 크기를 조정하고, 여백을 설정해보겠습니다.
아래 코드에 적힌 메소드를 참조하시면 됩니다.
f, axes = plt.subplots(3, 4)
# 격자 크기 설정
f.set_size_inches((20, 15))
# 격자 여백 설정
plt.subplots_adjust(wspace = 0.3, hspace = 0.3)
plt.show()
확실히 각 subplot이 탁 트이게 잘 구분되는 것을 확인할 수 있었습니다.
격자 여백은 가로 방향은 wspace, 세로 방향은 hspace 인자로 지정하시면 됩니다.
subplot 내 원하는 위치에 그래프 그리기
subplot 내의 각 위치에 접근하는 방법은 매우 간단합니다.
위에서 그래프 각각을 조절할 수 있는 변수인 axes에 대해서
인덱싱을 통하여 접근해주시면 됩니다.
참고로, axes[0, 1] 혹은 axes[0][1] 형태의 인덱싱이 모두 가능합니다.
각 칸에는 다른 종류의 그래프도 얼마든지 들어갈 수 있으며,
아래 코드에서 예시 그래프 몇 가지를 그려보도록 하겠습니다.
f, axes = plt.subplots(3, 4)
f.set_size_inches((20, 15))
plt.subplots_adjust(wspace = 0.3, hspace = 0.3)
# [0, 1] 위치 막대 그래프
axes[0, 1].bar(['x', 'y', 'z'], [15, 13, 18], color = ['r', 'g', 'y'], alpha = 0.4)
# [1, 3] 위치 선 그래프
axes[1][3].plot(range(5), [2, 8, 6, 3, 7], color = 'blue', marker = 'o')
# [2, 0] 위치 scatter 그래프(색깔 다르게 2개 겹치기)
axes[2, 0].scatter(range(5), [2, 8, 6, 3, 7], color = 'red', s = 10)
axes[2, 0].scatter([0.5, 1.5, 2.5, 3.5, 4.5], [4, 5, 4, 2, 6], color = 'purple', s = 10)
plt.show()
지정한 세 개의 위치에 원하는 형태의 그래프가 잘 그려진 것을 확인했습니다.
한 subplot 칸 내에 여러 그래프를 겹치는 것도 얼마든지 가능합니다.
figure 전체, 각 subplot에 대하여 제목 및 축 제목 정하기
figure 전체에 대한 제목 및 각 subplot의 제목 및 축 제목을 설정하는 방법도
말씀드려보겠습니다.
figure 전체에 대한 제목은 앞에서 정한 그래프 전체에 대한 f 변수에 대해
f.suptitle() 함수로 설정해주시면 됩니다.
각 subplot 내 figure의 제목은 각 위치를 인덱싱한 뒤,
axes[0, 1].set_title() 형태로 지정하게 되고,
축 제목은 axes[0, 1].set_xlable()처럼 지정해주시면 됩니다.
이 외에도 legend, text 등 기존 plt에서 사용하던 여러 메소드를
모두 마찬가지 방법으로 설정할 수 있습니다.
아래 예시 코드에서 다양한 경우의 예제를 보여드리며,
이번 포스팅을 마무리해보도록 하겠습니다. 감사합니다.
f, axes = plt.subplots(2, 2)
f.set_size_inches((12, 12))
plt.subplots_adjust(wspace = 0.15, hspace = 0.15)
# figure 전체 제목
f.suptitle('Subplot Example', fontsize = 15)
# 막대 그래프 예시(제목 설정)
axes[0, 0].bar(['x', 'y', 'z'], [15, 13, 18], color = ['r', 'g', 'y'], alpha = 0.4)
axes[0, 0].set_title('bar graph example', fontsize = 12)
# 선 그래프 예시(축 제목 설정)
axes[0, 1].plot(range(5), [2, 8, 6, 3, 7], color = 'blue', marker = 'o')
axes[0, 1].set_xlabel('x value', fontsize = 11)
axes[0, 1].set_ylabel('y value', fontsize = 11)
# scatter plot 예시(범례 설정)
axes[1, 0].scatter(range(5), [2, 8, 6, 3, 7], color = 'red', s = 10, label = 'data1')
axes[1, 0].scatter([0.5, 1.5, 2.5, 3.5, 4.5], [4, 5, 4, 2, 6], color = 'purple', s = 10, label = 'data2')
axes[1, 0].legend(loc = 'upper right')
# text 예시
axes[1, 1].text(0.3, 0.3, 'hello world!', size = 12)
axes[1, 1].text(0.6, 0.6, 'how are you?', size = 12)
plt.show()
'Python > Matplotlib' 카테고리의 다른 글
[Matplotlib] 파이썬 막대 그래프 색깔, 테두리, 폭 지정 (0) | 2022.01.05 |
---|---|
[Matplotlib] 파이썬 히스토그램 그리기 함수 사용법 : plt.hist() (0) | 2021.12.28 |
[Matplotlib] seaborn 이용 파이썬 box plot 그리기 (0) | 2021.12.05 |