본문 바로가기

혼자 공부하는 데이터 분석 with 파이썬

[혼공 분석] 다양한 그래프 그리기

1. 그래프를 객체로 다루기

 subplots() 함수를 사용하면, figure를 여러 개로 나누어서 각각을 다룰 수 있다. 다음과 같이 적용하면, 2x2크기의 서브플롯을 만들어서 다룰 수 있다.

fig, axes = plt.subplots(2, 2, figsize=(20, 16))

 

 이에 접근하려면 [row, col]로 접근해서 다룰 수 있다. ex)

axes[0, 0].set_title('출판사별 발행도서')

 

 

1.1 여러 개의 데이터 그리기

 단일 그래프에 여러 데이터를 겹쳐 비교하고 싶다면, 같은 축(ax)을 공유해 사용하면 된다. 예를 들어 선 그래프 2개를 추가한다고 하면 다음과 같다.

fig, ax = plt.subplots(figsize=(8, 6))
ax.plot(line1['발행년도'], line1['대출건수'], label='황금가지')
ax.plot(line2['발행년도'], line2['대출건수'], label='비룡소')

ax.set_title('연도별 대출 건수')
ax.legend()
plt.show()

 

결과값

 

  바 그래프 또한 2개를 동시에 그릴 수 있다.

fig, ax = plt.subplots(figsize=(8, 6))
ax.bar(line1['발행년도'], line1['대출건수'], label='황금가지')
ax.bar(line2['발행년도'], line2['대출건수'], label='비룡소')
ax.set_title('년도별 대출건수')
ax.legend()
plt.show()

 

결과값

 하지만 이런 경우는 그래프가 겹쳐있어 보기 힘들 수 있다. 이 경우 그래프들을 살짝 움직여서 나란히 옆으로 그릴 수 있다.

fig, ax = plt.subplots(figsize=(8, 6))
ax.bar(line1['발행년도']-0.2, line1['대출건수'], width=0.4, label='황금가지')
ax.bar(line2['발행년도']+0.2, line2['대출건수'], width=0.4, label='비룡소')
ax.set_title('년도별 대출건수')
ax.legend()
plt.show()

결과값

 

2. 스택 영역 그래프

 스택 영역 그래프(누적 영역 그래프, Stacked Area Graph)는 여러 개의 데이터가 쌓여서 하나의 전체적인 그래프를 형성하는 형태를 말한다. 따라서 각각의 값들을 볼 수 있는 선 차트와 다르게, 각각의 값들을 알기는 힘들지만 전체 규모의 변화와 개별 데이터의 비율의 변화를 알기 쉽다.

 

 matplot에서는 stackplot() 함수를 이용해서 그릴 수 있다.

fig, ax = plt.subplots(figsize=(8, 6))
ax.stackplot(year_cols, ns_book10.loc[top10_pubs].fillna(0), labels=top10_pubs)
ax.set_title('년도별 대출건수')
ax.legend(loc='upper left')
ax.set_xlim(1985, 2025)
plt.show()

결과값

 

3. 원 그래프

 원 그래프의 경우는 pie() 함수를 이용해 그릴 수 있다.

fig, ax = plt.subplots(figsize=(8, 6))
ax.pie(data, labels=labels)
ax.set_title('출판사 도서비율')
plt.show()

결과값

 

4. 숙제

fig, ax = plt.subplots(figsize=(10, 8))
sc = ax.scatter(ns_book8['발행년도'], ns_book8['출판사'],
                linewidths=0.5, edgecolors='k', alpha=0.3,
                s=ns_book8['대출건수']**1.3, c=ns_book8['대출건수'], cmap='jet')
ax.set_title('출판사별 발행도서')
fig.colorbar(sc)
plt.show()