Python의 Matplotlib 라이브러리는 데이터 시각화에 있어 매우 강력한 도구입니다. 특히 다양한 형태의 그래프를 손쉽게 생성할 수 있도록 도와줍니다. 이번 포스팅에서는 Matplotlib을 활용하여 막대 그래프를 그리는 방법에 대해 알아보겠습니다. 기본적인 막대 그래프에서부터 수평 막대, 그룹화된 데이터, 에러바, 누적 차트 등 다양한 그래프 스타일을 살펴보겠습니다.

Matplotlib 기본 막대 그래프 그리기
가장 먼저 기본적인 막대 그래프를 그려보겠습니다. 이를 위해서는 plt.bar()
함수를 사용합니다. 아래의 코드를 참조하여 실행해보세요.
import matplotlib.pyplot as plt
# 데이터 준비
labels = ['A', 'B', 'C', 'D']
values = [3, 7, 1, 9]
# 그래프 작성
plt.bar(labels, values)
# 제목과 축 레이블 추가
plt.title('기본 막대 그래프')
plt.xlabel('항목')
plt.ylabel('값')
# 그래프 표시
plt.show()
위의 코드에서 labels
는 X축의 카테고리를 나타내며, values
는 해당 카테고리에 대한 값을 설정합니다. 예제에서는 간단히 4개의 레이블과 그에 해당하는 값을 사용하였습니다.
수평 막대 그래프 그리기
이번에는 수평 막대 그래프를 그려보겠습니다. 수평 막대 그래프는 plt.barh()
함수를 사용하여 생성할 수 있습니다.
plt.barh(labels, values)
위의 함수 호출을 사용하면 X축과 Y축이 반대로 설정된 수평 막대 그래프가 그려집니다.
여러 그룹 데이터 비교하기
조금 더 복잡한 데이터 분석이 필요할 때는 여러 그룹의 데이터를 비교하는 그래프가 유용합니다. 그룹별 데이터를 생성하고, 각 그룹에 따른 그래프를 나누어 그려보겠습니다.
import pandas as pd
# 데이터 프레임 생성
data = {
'Labels': ['A', 'A', 'B', 'B', 'C', 'C', 'D', 'D'],
'Values': [3, 2, 7, 6, 9, 4, 5, 8],
'Group': ['그룹 1', '그룹 2', '그룹 1', '그룹 2', '그룹 1', '그룹 2', '그룹 1', '그룹 2']
}
df = pd.DataFrame(data)
# 서브플롯 설정
count = 1
plt.figure(figsize=(9, 6))
for i in df['Group'].unique():
df_group = df[df['Group'] == i]
plt.subplot(2, 1, count)
plt.bar(df_group['Labels'], df_group['Values'])
count += 1
plt.show()
이 코드는 각 그룹의 데이터에 따라 별도의 서브플롯을 생성하여 두 개의 그래프를 나란히 보여줍니다.
여러 그룹을 하나의 그래프에 담기
여러 그룹의 데이터를 한 그래프에 담아 비교하려면 X축 위치를 조정해야 합니다. 이를 통해 동일한 레이블에 대해 서로 다른 그룹의 값을 시각적으로 비교할 수 있습니다.
value1 = df[df['Group'] == '그룹 1']['Values'].values
value2 = df[df['Group'] == '그룹 2']['Values'].values
labels = df['Labels'].unique()
x = np.arange(len(labels))
plt.bar(x - 0.2, value1, width=0.4, color='blue', label='그룹 1')
plt.bar(x + 0.2, value2, width=0.4, color='green', label='그룹 2')
# 레이블 추가
plt.xlabel('항목')
plt.ylabel('값')
plt.title('하나의 그래프에 두 그룹 표시')
plt.xticks(ticks=x, labels=labels)
plt.legend()
plt.show()
이 코드를 실행하면 각 그룹의 데이터가 서로 겹치지 않게 막대 그래프가 생성됩니다.
에러바 그리기 (평균, 표준편차)
데이터의 평균과 함께 표준편차를 시각적으로 나타내고 싶을 때 에러바를 추가할 수 있습니다. 이를 통해 데이터의 분산을 쉽게 파악할 수 있습니다.
df_mean = df.groupby('Group').mean()
plt.bar(df_mean.index, df_mean['Values'], yerr=df.groupby('Group').std()['Values'])
위의 코드에서 yerr
파라미터에 표준편차를 계산하여 에러바를 추가합니다.
누적 막대 차트 그리기
누적 막대 차트는 각 카테고리의 전체 합계와 구성 비율을 시각적으로 나타내기 위해 사용됩니다. 이를 통해 데이터를 보다 직관적으로 이해할 수 있습니다.
df_pivot = df.pivot(index='Labels', columns='Group', values='Values')
df_pivot.plot(kind='bar', stacked=True)
여기서 피벗 테이블을 사용하면 각 그룹을 쉽게 비교할 수 있는 누적 막대 그래프를 생성할 수 있습니다.
100% 누적 막대 차트 그리기
각 카테고리의 비율만을 강조하고자 할 때는 100% 누적 차트를 사용할 수 있습니다.
df_pivot.plot(kind='bar', stacked=True, fill=True)
위의 코드에서 fill=True
를 설정하여 각 카테고리의 비율을 100%로 맞춘 누적 차트를 생성합니다.

결론
이번 포스팅에서는 Python의 Matplotlib 라이브러리를 활용하여 다양한 형태의 막대 그래프를 그리는 방법에 대해 살펴보았습니다. 데이터의 시각화는 데이터를 이해하는 데 매우 중요한 과정이며, 적절한 그래프를 선택하는 것이 중요합니다. Matplotlib을 통해 여러분의 데이터를 더욱 효과적으로 표현해 보세요.
자주 묻는 질문 FAQ
Matplotlib을 사용하면 어떤 그래프를 그릴 수 있나요?
Matplotlib을 활용하면 기본 막대 그래프는 물론, 수평 막대 그래프, 그룹화된 그래프, 에러바 및 누적 차트 등 다양한 형태의 그래프를 쉽게 생성할 수 있습니다.
막대 그래프를 어떻게 그릴 수 있나요?
막대 그래프는 plt.bar()
함수를 이용하여 만들 수 있습니다. 데이터와 레이블을 제공하면 간단히 시각화할 수 있습니다.
수평 막대 그래프는 어떻게 만들죠?
수평 막대 그래프는 plt.barh()
함수를 사용하여 쉽게 생성할 수 있으며, X축과 Y축의 위치가 서로 바뀝니다.
그룹별 데이터를 비교하려면 어떻게 해야 하나요?
여러 그룹의 데이터를 비교하고자 할 때는 서브플롯을 활용하여 각각의 그래프를 나누어 그리는 방법이 매우 유용합니다.
에러바를 추가하는 목적은 무엇인가요?
에러바는 데이터의 평균이나 표준편차를 시각적으로 표시하는 데 사용되며, 데이터의 변동성을 쉽게 이해하는 데 도움을 줍니다.