막대 그래프와 히스토그램
ax.bar()로 범주별 개수를, ax.hist()로 데이터 분포를 시각화하고 구간 개수와 테두리 색상을 조정합니다.
막대 그래프와 히스토그램은(는) CoddyKit의 무료 Pandas & NumPy Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Pandas & NumPy Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
막대 차트와 히스토그램
막대 차트는 범주형 데이터를 표시합니다. 범주마다 막대 하나를 사용하며, 막대의 높이는 값에 비례합니다. 막대 차트는 '각 범주의 값은 얼마인가?'라는 질문에 답합니다. 히스토그램은 연속적인 수치 변수의 분포를 표시합니다. 데이터를 구간으로 나누고 각 구간의 개수 또는 빈도를 막대 높이로 나타냅니다. 히스토그램은 '이 값들은 어떻게 분포하는가?'라는 질문에 답합니다. 두 차트에는 각각 ax.bar()와 ax.hist()를 사용합니다.
세로 막대 차트에 ax.bar() 사용하기
ax.bar(x, height)는 세로 막대 차트를 그립니다. 여기서 x는 범주의 위치(또는 레이블) 시퀀스이고 height는 막대 값입니다. 주요 매개변수는 다음과 같습니다. width(기본값 0.8, 간격에 대한 막대 너비 조정), color, edgecolor, align('center' 또는 'edge')입니다. 이 함수는 Rectangle 아티스트 객체의 목록을 반환합니다.
import matplotlib.pyplot as plt
import numpy as np
categories = ['East', 'West', 'North', 'South']
values = [420, 380, 310, 290]
fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(categories, values, color='steelblue', edgecolor='white', width=0.6)
ax.set_title('Regional Revenue')
ax.set_xlabel('Region')
ax.set_ylabel('Revenue (USD)')
# plt.show()
plt.close()막대 모양 사용자 지정하기
몇 가지 사용자 지정만으로도 막대 차트의 가독성을 크게 높일 수 있습니다. 모든 막대에 하나의 강조 색을 사용하거나 막대마다 다른 색을 지정하는 배열을 사용하고, ax.bar_label()로 각 막대 위에 값 레이블을 추가하십시오. 막대 너비를 조정해 여백을 두고, ax.set_ylim(0, max * 1.15)로 가장 높은 막대 위에 레이블을 표시할 공간을 확보하십시오.
fig, ax = plt.subplots(figsize=(7, 4))
bars = ax.bar(categories, values, color='steelblue', edgecolor='white', width=0.6)
# Add value labels above bars
ax.bar_label(bars, fmt='%d', padding=3, fontsize=10)
# Give space above bars for labels
ax.set_ylim(0, max(values) * 1.15)
ax.set_title('Regional Revenue')
plt.tight_layout()
plt.close()ax.barh()로 가로 막대 차트 만들기
가로 막대 차트에는 ax.barh(y, width)를 사용하십시오. 범주 레이블이 길 때(왼쪽에서 오른쪽으로 자연스럽게 읽히므로) 또는 범주가 많을 때(더 조밀하게 배치할 수 있으므로) 가로 막대가 적합합니다. 다른 사용자 지정 매개변수도 동일하게 적용됩니다. height는 막대의 두께를 조정하고, ax.barh_label()(또는 ax.bar_label())은 텍스트 레이블을 추가합니다.
import pandas as pd
df = pd.DataFrame({'region': categories, 'revenue': values})
df_sorted = df.sort_values('revenue')
fig, ax = plt.subplots(figsize=(7, 4))
ax.barh(df_sorted['region'], df_sorted['revenue'],
color='steelblue', edgecolor='white', height=0.5)
ax.set_title('Revenue by Region (Sorted)')
ax.set_xlabel('Revenue (USD)')
plt.tight_layout()
plt.close()그룹형 막대 차트
여러 그룹을 나란히 비교하려면 막대 위치를 직접 오프셋하여 그룹형 막대 차트를 만드십시오. 각 그룹의 중앙 위치를 계산한 다음 각 하위 그룹에 대해 고정 오프셋을 빼거나 더합니다. 막대 너비의 합과 그룹 사이 간격을 합한 값이 1.0이 되도록 해야 막대가 겹치지 않습니다. ax.set_xticks()를 설정하면 그룹으로 묶인 막대 사이에 눈금 레이블이 가운데 정렬됩니다.
products = ['A', 'B', 'C']
q1 = [80, 120, 95]
q2 = [90, 110, 105]
x = np.arange(len(products))
width = 0.35
fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(x - width/2, q1, width, label='Q1', color='steelblue')
ax.bar(x + width/2, q2, width, label='Q2', color='coral')
ax.set_xticks(x)
ax.set_xticklabels(products)
ax.legend()
ax.set_title('Q1 vs Q2 Sales by Product')
plt.close()누적 막대 차트
누적 막대는 여러 하위 그룹으로 구성된 전체 값의 구성을 보여 줍니다. 두 번째 그룹의 막대는 bottom 매개변수를 사용해 첫 번째 그룹의 막대가 끝나는 위치에서 시작합니다. 이후 각 층의 bottom은 이전 모든 층의 누적 합입니다. 누적 막대는 전체 값과 각 구성 요소의 기여도를 동시에 보여 줄 때 유용합니다.
q1_arr = np.array(q1)
q2_arr = np.array(q2)
fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(products, q1_arr, label='Q1', color='steelblue')
ax.bar(products, q2_arr, bottom=q1_arr, label='Q2', color='coral')
ax.legend()
ax.set_title('Stacked Q1 + Q2 Sales by Product')
ax.set_ylabel('Total Sales')
plt.close()히스토그램에 ax.hist() 사용하기
ax.hist(data, bins)는 히스토그램을 만듭니다. bins 매개변수는 데이터를 몇 개의 동일한 간격으로 나눌지 제어합니다(기본값 10). 서로 다른 간격을 사용하려면 구간 경계 목록을 전달할 수도 있습니다. 주요 매개변수는 다음과 같습니다. density=True는 히스토그램을 확률 밀도로 정규화하고, edgecolor는 막대 사이에 테두리를 추가하며, color와 alpha는 모양을 조정합니다.
np.random.seed(42)
data = np.random.randn(500) # 500 samples from standard normal
fig, ax = plt.subplots(figsize=(7, 4))
ax.hist(data, bins=30, color='steelblue', edgecolor='white', alpha=0.7)
ax.set_title('Distribution of Values')
ax.set_xlabel('Value')
ax.set_ylabel('Count')
plt.close()구간 수 선택하기
구간의 수는 히스토그램의 모양에 큰 영향을 줍니다. 구간이 너무 적으면 구조가 드러나지 않고, 너무 많으면 잡음이 많은 급증이 생깁니다. 일반적으로 사용하는 경험적 방법으로는 Sturges 규칙(≈ log2(n) + 1), Scott 규칙, Freedman-Diaconis 규칙이 있습니다. Matplotlib에서는 다음과 같은 문자열로 이를 지원합니다: bins='auto', bins='scott', bins='fd'. 탐색적 분석에서는 몇 가지 값을 직접 시도해 보고, 프레젠테이션에서는 데이터의 형태를 가장 잘 전달하는 구간 수를 선택하십시오.
fig, axes = plt.subplots(1, 3, figsize=(12, 4))
for ax, b in zip(axes, [5, 30, 'auto']):
ax.hist(data, bins=b, edgecolor='white', color='steelblue', alpha=0.7)
ax.set_title(f'bins={b}')
ax.set_xlabel('Value')
plt.tight_layout()
plt.close()비교를 위한 겹친 히스토그램
같은 축에서 두 분포를 비교하려면 서로 다른 데이터를 사용해 ax.hist()를 두 번 호출하고 색상도 다르게 지정하십시오. 겹치는 부분이 보이도록 두 그래프에 alpha=0.5를 사용하십시오. 레이블을 추가한 다음 ax.legend()를 호출하십시오. 표본 크기가 다를 때 density=True를 사용하면 두 히스토그램이 같은 척도로 정규화되어 형태를 직접 비교할 수 있습니다.
group_a = np.random.randn(300)
group_b = np.random.randn(300) + 1.5 # shifted right
fig, ax = plt.subplots(figsize=(7, 4))
ax.hist(group_a, bins=25, alpha=0.5, color='steelblue', label='Group A', density=True)
ax.hist(group_b, bins=25, alpha=0.5, color='coral', label='Group B', density=True)
ax.legend()
ax.set_title('Distribution Comparison')
plt.close()Pandas Series와 DataFrames 그리기
.plot.bar()와 .plot.hist()는 모두 DataFrame/Series 메서드로 사용할 수 있으며 Matplotlib 그림을 자동으로 생성합니다. 기존 Axes에 그리도록 ax 매개변수를 지정할 수 있습니다. 그룹화된 Pandas 데이터에서 막대 차트를 만드는 가장 빠른 방법은 groupby 집계를 계산하고, 그 결과에 .plot.bar()를 호출한 다음 반환된 Axes를 사용자 지정하는 것입니다.
import pandas as pd
import numpy as np
df_sales = pd.DataFrame({
'region': ['East', 'West', 'North', 'South'],
'revenue': [420, 380, 310, 290]
}).set_index('region')
fig, ax = plt.subplots(figsize=(7, 4))
df_sales['revenue'].plot.bar(ax=ax, color='steelblue', rot=0)
ax.set_title('Revenue by Region')
plt.tight_layout()
plt.close()막대 차트와 히스토그램 중 선택하기
막대 차트와 히스토그램 중 무엇을 사용할지는 데이터 유형에 따라 달라집니다. x축이 서로 구분되는 순서 없는 범주(제품명, 지역, 사용자 세그먼트)를 나타내고 각 막대가 범주별 집계값을 나타낸다면 막대 차트를 사용하십시오. x축이 연속형 수치 변수이고 값이 일정한 범위에 어떻게 분포하는지 보여 주려면 히스토그램을 사용하십시오. 둘을 혼동하면 데이터 유형에 대해 독자를 오도하는 흔한 시각화 오류가 발생합니다.
# Bar chart: categorical x-axis (product names)
products = ['Widget', 'Gadget', 'Doohickey']
revenue = [500, 300, 200]
fig, ax = plt.subplots(figsize=(5, 3))
ax.bar(products, revenue, color='steelblue')
ax.set_title('Revenue per Product (Bar Chart)')
plt.close()
# Histogram: continuous x-axis (order sizes)
order_sizes = np.random.exponential(scale=50, size=300)
fig, ax = plt.subplots(figsize=(5, 3))
ax.hist(order_sizes, bins=20, color='coral', edgecolor='white')
ax.set_title('Distribution of Order Sizes (Histogram)')
plt.close()빠른 확인
이 강의에서 배운 막대 차트와 히스토그램에 대한 이해도를 확인해 보십시오.
강의 요약
이 강의에서는 다음을 배웠습니다. ax.bar()는 세로 막대 차트를 만들고 ax.barh()는 가로 막대 차트를 만듭니다. bottom은 누적 막대를 활성화합니다. ax.hist()는 bins로 구간 수를 조정하는 히스토그램을 만듭니다. 또한 density=True는 공정한 비교를 위해 히스토그램을 정규화합니다. 다음에는 축 레이블과 제목을 추가하고 출판물 수준의 그림을 저장하는 방법을 알아보겠습니다.
AI 튜터와 함께 Python을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 30
- 레슨
- 120
자주 묻는 질문
“막대 그래프와 히스토그램” 강의는 무료인가요?
네 — “막대 그래프와 히스토그램” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Pandas & NumPy Academy 강의 전체를 잠금 해제할 수 있습니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“막대 그래프와 히스토그램”에서 뭘 배우나요?
ax.bar()로 범주별 개수를, ax.hist()로 데이터 분포를 시각화하고 구간 개수와 테두리 색상을 조정합니다. 브라우저에서 직접 실행하는 실습 코드로 Pandas & NumPy Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Pandas & NumPy Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Pandas & NumPy Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“막대 그래프와 히스토그램” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Pandas & NumPy Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Pandas & NumPy Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Figure와 Axes 구조
- 선 그래프와 산점도
- 막대 그래프와 히스토그램
- 레이블, 제목, 그림 저장