[Python] 09. Seaborn 여러 개의 plot 한번에 그리기

Seaborn을 사용하여 여러 개의 그래프를 한 번에 그리려면 Matplotlib의 서브플롯(subplot) 기능을 활용할 수 있습니다.
Seaborn은 Matplotlib를 기반으로 하기 때문에, Matplotlib의 서브플롯을 사용하여 여러 개의 그래프를 한 번에 출력할 수 있습니다.
아래 예제는 Seaborn을 사용하여 여러 개의 그래프를 한 번에 그리는 방법을 보여줍니다.

Matplotlib의 서브플롯 (subplot)

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 샘플 데이터프레임 생성
data = {'Year': [2010, 2011, 2012, 2013, 2014],
        'Sales': [500, 800, 1200, 900, 1500],
        'Expenses': [300, 400, 600, 500, 800]}
df = pd.DataFrame(data)

# 서브플롯 생성
fig, axes = plt.subplots(2, 2, figsize=(10, 8))

# 선 그래프
sns.lineplot(data=df, x='Year', y='Sales', ax=axes[0, 0])
axes[0, 0].set_title('Sales')

# 막대 그래프
sns.barplot(data=df, x='Year', y='Expenses', ax=axes[0, 1])
axes[0, 1].set_title('Expenses')

# 산점도
sns.scatterplot(data=df, x='Sales', y='Expenses', ax=axes[1, 0])
axes[1, 0].set_title('Sales vs. Expenses')

# 히스토그램
sns.histplot(data=df, x='Sales', ax=axes[1, 1])
axes[1, 1].set_title('Sales Distribution')

# 그래프 간 간격 조정
plt.tight_layout()

# 그래프 출력
plt.show()
subplot 출력 결과

위의 예제에서는 Matplotlib의 subplots() 함수를 사용하여 2×2 서브플롯을 생성합니다.
그리고 sns.lineplot(), sns.barplot(), sns.scatterplot(), sns.histplot() 함수를 사용하여 서브플롯에 각각의 그래프를 그립니다.
ax 매개변수를 사용하여 각 그래프를 해당하는 서브플롯에 배치합니다.
set_title() 메서드를 사용하여 각 서브플롯에 제목을 설정합니다.

마지막으로, plt.tight_layout() 함수를 사용하여 그래프 간의 간격을 조정한 후 plt.show() 함수를 호출하여 그래프를 출력합니다.

이렇게 서브플롯을 사용하여 Seaborn 그래프를 한 번에 그리면 여러 그래프를 한 번에 비교하거나 동시에 표시할 수 있습니다.
그래프의 크기와 위치를 조정하여 원하는 형태로 시각화 결과를 표현할 수 있습니다.

Matplotlib의 서브플롯(axes) 개체를 사용하여 그래프의 세부 항목을 설정

Matplotlib의 서브플롯(axes) 개체를 사용하여 그래프의 세부 항목을 설정할 수 있습니다.
각 서브플롯에 대해 타이틀, x축 레이블, y축 레이블 등을 개별적으로 설정할 수 있습니다.
아래 예제는 Seaborn을 사용하여 그래프를 그리고 Matplotlib의 서브플롯 개체를 활용하여 각 그래프의 세부 항목을 설정하는 방법을 보여줍니다.

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 샘플 데이터프레임 생성
data = {'Year': [2010, 2011, 2012, 2013, 2014],
        'Sales': [500, 800, 1200, 900, 1500],
        'Expenses': [300, 400, 600, 500, 800]}
df = pd.DataFrame(data)

# 서브플롯 생성
fig, axes = plt.subplots(2, 2, figsize=(10, 8))

# 첫 번째 서브플롯: 선 그래프
sns.lineplot(data=df, x='Year', y='Sales', ax=axes[0, 0])
axes[0, 0].set_title('Sales Trend', fontsize=12)
axes[0, 0].set_xlabel('Year', fontsize=10)
axes[0, 0].set_ylabel('Sales', fontsize=10)
axes[0, 0].set_xticks(df['Year'])
axes[0, 0].tick_params(axis='both', which='major', labelsize=8)

# 두 번째 서브플롯: 막대 그래프
sns.barplot(data=df, x='Year', y='Expenses', ax=axes[0, 1])
axes[0, 1].set_title('Expenses', fontsize=12)
axes[0, 1].set_xlabel('Year', fontsize=10)
axes[0, 1].set_ylabel('Expenses', fontsize=10)
axes[0, 1].tick_params(axis='both', which='major', labelsize=8)

# 세 번째 서브플롯: 산점도
sns.scatterplot(data=df, x='Sales', y='Expenses', ax=axes[1, 0])
axes[1, 0].set_title('Sales vs. Expenses', fontsize=12)
axes[1, 0].set_xlabel('Sales', fontsize=10)
axes[1, 0].set_ylabel('Expenses', fontsize=10)
axes[1, 0].tick_params(axis='both', which='major', labelsize=8)

# 네 번째 서브플롯: 히스토그램
sns.histplot(data=df, x='Sales', ax=axes[1, 1])
axes[1, 1].set_title('Sales Distribution', fontsize=12)
axes[1, 1].set_xlabel('Sales', fontsize=10)
axes[1, 1].set_ylabel('Frequency', fontsize=10)
axes[1, 1].tick_params(axis='both', which='major', labelsize=8)

# 그래프 간 간격 조정
plt.tight_layout()

# 그래프 출력
plt.show()
Matplotlib의 서브플롯(axes) 개체를 사용하여 그래프의 세부 항목을 설정한 출력 결과

위의 예제에서는 set_title(), set_xlabel(), set_ylabel(), set_xticks(), tick_params() 등의 메서드를 사용하여 각 서브플롯의 세부 항목을 설정하였습니다.

set_ 메서드는 다음과 같은 역할을 수행합니다.

set_title()

서브플롯의 제목 설정

set_xlabel()

x축 레이블 설정

set_ylabel()

y축 레이블 설정

set_xticks()

x축의 눈금(tick) 설정

tick_params()

축의 눈금(tick) 스타일과 레이블 크기 설정

각각의 메서드에는 fontsizelabelsize와 같은 매개변수를 사용하여 글꼴 크기를 조절할 수 있습니다.
tick_params() 메서드를 사용하여 축의 눈금(tick) 스타일과 레이블 크기를 조정할 수도 있습니다.

위 예제에서는 tight_layout() 함수를 사용하여 그래프 간의 간격을 조정하였습니다.
이를 통해 그래프가 겹치지 않고 잘 정렬되어 출력됩니다.

각 서브플롯에 대해 필요한 세부 항목을 설정하여 그래프를 더욱 자세하게 커스터마이징할 수 있습니다.
이를 통해 그래프의 가독성과 전반적인 시각적인 효과를 향상시킬 수 있습니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤