Skip to content

Matplotlib을 사용하여 동시에 여러 플롯 마스터하기

Updated on

시각화는 데이터 과학 세계에서 필수적인 기술입니다. 이 퀘스트에서 귀중한 도구 중 하나는 데이터 시각화를 위해 구축된 파이썬 라이브러리인 Matplotlib입니다. 이 포괄적인 가이드에서는 Matplotlib에서 동일한 그림에 여러 플롯을 만드는 방법을 자세히 살펴보겠습니다. 이 능력은 통합 캔버스에서 여러 데이터 트렌드를 비교해야할 때 특히 유용하며, 데이터 시각화의 명확성과 가독성을 더욱 향상시킵니다.

Matplotlib에서 여러 플롯의 기본 사항

더 복잡한 시각화에 집중하기 전에, Matplotlib을 사용하여 동일한 그림에 여러 줄을 작성하는 기본 사항을 다루어 보겠습니다.

Matplotlib의 pyplot 모듈은 그래픽과 플롯을 만드는 것이 쉽습니다. 그 문법은 MATLAB과 매우 유사하여 해당 시스템을 알고 있을 경우 유리할 수 있습니다. 시작하려면 서로 다른 데이터 집합을 사용하여 두 개의 라인이있는 그림을 만드는 방법을 설명하는 간단한 예제가 있습니다.

import matplotlib.pyplot as plt
 
# 샘플 데이터
x = [1, 2, 3, 4, 5]
y1 = [1, 2, 3, 4, 5]
y2 = [5, 4, 3, 2, 1]
 
# 플롯 생성
plt.plot(x, y1, 'b-', label='오름차순')
plt.plot(x, y2, 'r-', label='내림차순')
 
# 범례 포함
plt.legend(loc='best')
 
# 그림 표시
plt.show()

이 예제에서 plt.plot(x, y1, 'b-', label='오름차순')plt.plot(x, y2, 'r-', label='내림차순')은 y1 및 y2 데이터 집합을 x에 대해 그립니다. 'b-' 및 'r-' 인수는 선 색상 및 유형(각각 파란색 및 빨간색)을 정의하고, '오름차순' 및 '내림차순'은 범례의 레이블로 사용됩니다. plt.legend(loc='best') 함수 호출은 플롯된 줄과 가장 적게 겹치는 위치에 범례를 배치합니다.

더 많은 플롯, 더 복잡성: Matplotlib의 객체 지향 API

이전 방법은 간단하고 단순한 플롯에 대해 효과적이지만, 더 복잡한 시각화를 다룰 때는 제한적 일 수 있습니다. 여기서 Matplotlib의 객체 지향 API가 등장합니다. Figure 및 Axes 객체를 만들어 요소에 대한 더 정교한 제어를 얻을 수 있습니다. 다음은 동일한 결과를 얻기 위해 이 API를 사용하는 방법입니다.

# 새로운 Figure 및 Axes 객체 만들기
fig, ax = plt.subplots()
 
# Axes에 데이터 플롯하기
ax.plot(x, y1, 'b-', label='오름차순')
ax.plot(x, y2, 'r-', label='내림차순')
 
# 범례 포함
ax.legend(loc='best')
 
# 그림 표시
plt.show()

코드 해독: 객체 지향 접근 방식 이해하기

당신은 아마도 왜 더 간단한 pyplot 모듈이 일을 하는데 더 장황한 객체 지향 API를 사용하는지 궁금할 것입니다. 시각화가 더 복잡해질수록, 답은 분명해집니다. Figure 및 Axes 객체를 사용하면 플롯에 대한 더 큰 제어 권한을 얻을 수 있습니다. 단순한 pyplot 인터페이스에서 쉽게 제공하지 않는 사용자 정의를 허용합니다.

Figure 및 Axes 객체를 플롯의 컨테이너로 생각하면 됩니다. Figure 객체는 모든 것이 그려지는 전체 창이나 페이지입니다. 여러 개의 Axes 객체를 포함할 수 있습니다. 각 Axes 객체는 각각 고유한 요소 (선, 범례, 레이블 등)를 가지는 별도의 플롯입니다.

이해하면 객체 지향 접근 방식이 다음 섹션에서 탐구할 보다 복잡한 다중 플롯 시각화에 강력한 기초가 된다는 것을 볼 수 있습니다.

다중 서브플롯: 동일 Figure에 둘 이상의 Axes

하나의 Axes 객체에서 여러 개의 선을 그리는 것을 다루었지만 동일한 Figure에서 완전히 별개의 서브플롯을 비교하려면 어떻게 해야 할까요? Matplotlib의 subplots() 함수는 이를 효율적으로 수행하는 방법을 제공합니다. subplots() 함수는 동시에 새로운 Figure와 여러 개의 Axes 객체를 생성하여 사용할 수 있도록 반환합니다. 동일한 Figure에 두 개의 행과 두 개의 열이 있는 총 네 개의 서브플롯을 생성하는 방법을 살펴보겠습니다.

# Create a new Figure with a 2x2 grid of Axes
fig, axs = plt.subplots(2, 2)
 
# Define some sample data
x = [1, 2, 3, 4, 5]
y = [[1, 2, 3, 4, 5], [5, 4, 3, 2, 1], [2, 3, 4, 5, 6], [6, 5, 4, 3, 2]]
 
# Plot the data on each Axes
for i, ax in enumerate(axs.flatten()):
    ax.plot(x, y[i])
 
# Show the figure
plt.show()

이 경우 plt.subplots(2, 2)는 2x2 그리드의 Axes를 생성하고, axs.flatten()은 이러한 Axes를 간단한 for 루프에서 반복하는 데 사용됩니다.

복수의 Y-축: 하나의 Y-축으로는 충분하지 않을 때

때로는 동일한 그래프에서 서로 다른 스케일이나 단위가 있는 서로 다른 데이터 집합을 표시해야합니다. 같은 그래프에서 두 개의 다른 y-축을 사용하는 것은 이러한 시나리오에 대한 완벽한 해결책입니다. Matplotlib의 객체 지향 API를 사용하면 다음과 같이 간단합니다.

# Create a new Figure and Axes
fig, ax1 = plt.subplots()
 
# Create a second Axes that shares the same x-axis
ax2 = ax1.twinx()
 
# Plot data on each Axes
ax1.plot(x, y1, 'b-', label='Data Set 1')
ax2.plot(x, y2, 'r-', label='Data Set 2')
 
# Set y-axis labels
ax1.set_ylabel('Data Set 1', color='b')
ax2.set_ylabel('Data Set 2', color='r')
 
# Show the figure
plt.show()

이 경우 ax1.twinx()는 x-축을 ax1과 공유하지만 별도의 y-축을 가진 새로운 Axes를 생성합니다.

Matplotlib 대체 방법: PyGWalker를 사용하여 데이터 시각화

팬더스 데이터프레임을 시각화하는 데 Matplotlib을 사용하는 것 외에도, 여기에는 데이터 시각화를 쉽게 생성하는 Open Source python 라이브러리 인 PyGWalker (opens in a new tab)의 대안이 있습니다.

PyGWalker for Data visualization (opens in a new tab) Python 코딩으로 복잡한 처리를 더 이상 완료할 필요가 없습니다. 데이터를 가져와 변수를 끌어다 놓기만 하면 모든 종류의 데이터 시각화를 만들 수 있습니다! 여기 작동 방법에 대한 빠른 데모 비디오가 있습니다:


Jupyter Notebook에서 PyGWalker를 사용하는 방법은 다음과 같습니다.

pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)

대체로 Kaggle Notebook/Google Colab에서 시도해 볼 수 있습니다:

Run PyGWalker in Kaggle Notebook (opens in a new tab)Run PyGWalker in Google Colab (opens in a new tab)Give PyGWalker a ⭐️ on GitHub (opens in a new tab)
Run PyGWalker in Kaggle Notebook (opens in a new tab)Run PyGWalker in Google Colab (opens in a new tab)Run PyGWalker in Google Colab (opens in a new tab)

PyGWalker는 오픈 소스 커뮤니티의 지원으로 구축되었습니다. PyGWalker GitHub (opens in a new tab)를 확인하고 별을 주는 것을 잊지 마세요!

결론

Matplotlib에서 동일한 도면에서 여러 플롯을 생성하는 기술을 확실하게 이해하면 데이터 시각화 기술이 크게 향상될 수 있습니다. 기본 개념을 이해하고 점차적으로 더 복잡한 영역으로 진입함으로써 Matplotlib을 효과적으로 사용하여 데이터를 표현할 수 있습니다.

FAQ

  1. Matplotlib에서 동일한 도면에서 여러 플롯을 생성하는 것의 이점은 무엇인가요?

동일한 도면에서 여러 플롯을 가지는 것은 데이터 시각화를 크게 향상시킬 수 있습니다. 이 기능은 하나의 캔버스에서 여러 데이터 추세를 분석할 수 있도록 구성함으로써 더 직관적인 데이터 비교를 가능하게 합니다. 또한 데이터 표현의 명확성과 가독성을 향상시킵니다.

  1. Matplotlib의 객체 지향 API를 사용해야 하는 경우는 언제인가요?

pyplot 모듈은 간단한 그래프를 위해서 직관적이고 유용하지만, Matplotlib의 객체 지향 API는 더 복잡한 시각화를 위해 더 적합합니다. Figure와 Axes 객체와 직접 상호 작용함으로써 플롯의 요소에 대한 더 세밀한 제어를 얻을 수 있습니다. 이것은 시각화에 더 높은 수준의 사용자 정의가 필요한 경우에는 매우 유용할 수 있습니다.

  1. 동일한 플롯에서 여러 y-축을 사용하는 목적은 무엇인가요?

동일한 그래프에서 서로 다른 스케일이나 단위를 가진 다른 데이터 집합을 그래프로 그릴 때 여러 y-축은 특히 유용합니다. 각 데이터 집합을 해당하는 y-축에 할당함으로써 서로 다른 스케일이나 단위를 효과적으로 나타낼 수 있으므로 데이터를 왜곡하거나 잘못된 방식으로 나타내지 않고 효과적으로 표현할 수 있습니다.