[시각화 도구/Matplotlib - 기본 그래프 도구] 면적 그래프
2022. 11. 16. 13:31
면적 그래프는 각 열의 데이터를 선 그래프로 구현하는데, 선 그래프와 x축 사이의 공간에 색이 입혀진다.
색의 투명도는 기본값 0.5로 투과되어 보인다.
선 그래프를 그리는 plot() 메소드에 kind='area' 옵션을 추가하면 간단하게 그릴 수 있다.
stacked=True 옵션(기본값)을 추가하면 각 열의 선 그래프를 다른 열의 선 그래프 위로 쌓아 올리는 방식으로 표현된다.
각 열의 패턴과 함께 열 전체의 합계가 어떻게 변하는지 파악할 수 있게 된다. 따라서, 면적 그래프를 선 그래프를 확장한 개념으로 누적 선 그래프라고 부르기도 한다.
stacked=False 옵션을 지정하면 각 열의 선 그래프들이 누적되지 않고 서로 겹치도록 표시된다. 선 그래프를 동일한 화면에 여러 개를 그린 것과 같은 결과가 된다.
stacked=False 옵션을 지정하여 데이터를 누적하지 않는 unstacked 버전부터 그려본다.
# 예제 4-13
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
font_path = 'C:\Windows\Fonts\malgunsl.ttf'
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font_name)
df = pd.read_excel('시도별 전출입 인구수.xlsx', engine='openpyxl', header=0)
df = df.fillna(method='ffill')
mask = (df['전출지별'] == '서울특별시') & (df['전입지별'] != '서울특별시')
df_seoul = df[mask]
df_seoul = df_seoul.drop(['전출지별'], axis=1)
df_seoul.rename({'전입지별': '전입지'}, axis=1, inplace=True)
df_seoul.set_index('전입지', inplace=True)
col_years = list(map(str, range(1970, 2018)))
df_4 = df_seoul.loc[['충청남도', '경상북도', '강원도', '전라남도'], col_years]
df_4 = df_4.transpose()
plt.style.use('ggplot')
df_4.index = df_4.index.map(int)
df_4.plot(kind='area', stacked=False, alpha=0.2, figsize=(20, 10))
plt.title('서울 -> 타시도 인구 이동', size=30)
plt.ylabel('이동 인구 수', size=20)
plt.xlabel('기간', size=20)
plt.legend(loc='best', fontsize=15)
plt.show()
alpha=0.2 옵션을 적용하여 서로 겹쳐지는 부분이 잘 투과되어 보이도록 한다.
이번에는 stacked=True 옵션을 지정하여 선 그래프들이 서로 겹치지 않고 위 아래로 데이터가 누적되는 면적 그래프를 그려본다.
# 예제 4-14
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
font_path = 'C:\Windows\Fonts\malgunsl.ttf'
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font_name)
df = pd.read_excel('시도별 전출입 인구수.xlsx', engine='openpyxl', header=0)
df = df.fillna(method='ffill')
mask = (df['전출지별'] == '서울특별시') & (df['전입지별'] != '서울특별시')
df_seoul = df[mask]
df_seoul = df_seoul.drop(['전출지별'], axis=1)
df_seoul.rename({'전입지별': '전입지'}, axis=1, inplace=True)
df_seoul.set_index('전입지', inplace=True)
col_years = list(map(str, range(1970, 2018)))
df_4 = df_seoul.loc[['충청남도', '경상북도', '강원도', '전라남도'], col_years]
df_4 = df_4.transpose()
plt.style.use('ggplot')
df_4.index = df_4.index.map(int)
df_4.plot(kind='area', stacked=True, alpha=0.2, figsize=(20, 10))
plt.title('서울 -> 타시도 인구 이동', size=30)
plt.ylabel('이동 인구 수', size=20)
plt.xlabel('기간', size=20)
plt.legend(loc='best', fontsize=15)
plt.show()
<예제 4-14>에서 plot() 메소드로 만든 그래프는 axe 객체이다.
axe 객체의 세부적인 요소를 설정하여 그래프를 꾸며줄 수 있다.
# 예제 4-15
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
font_path = 'C:\Windows\Fonts\malgunsl.ttf'
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font_name)
df = pd.read_excel('시도별 전출입 인구수.xlsx', engine='openpyxl', header=0)
df = df.fillna(method='ffill')
mask = (df['전출지별'] == '서울특별시') & (df['전입지별'] != '서울특별시')
df_seoul = df[mask]
df_seoul = df_seoul.drop(['전출지별'], axis=1)
df_seoul.rename({'전입지별': '전입지'}, axis=1, inplace=True)
df_seoul.set_index('전입지', inplace=True)
col_years = list(map(str, range(1970, 2018)))
df_4 = df_seoul.loc[['충청남도', '경상북도', '강원도', '전라남도'], col_years]
df_4 = df_4.transpose()
plt.style.use('ggplot')
df_4.index = df_4.index.map(int)
ax = df_4.plot(kind='area', stacked=True, alpha=0.2, figsize=(20, 10))
print(type(ax))
ax.set_title('서울 -> 타시도 인구 이동', size=30, color='brown', weight='bold')
ax.set_ylabel('이동 인구 수', size=20, color='blue')
ax.set_xlabel('기간', size=20, color='blue')
ax.legend(loc='best', fontsize=15)
plt.show()
![]() |
|
'공부 > 파이썬 머신러닝 판다스 데이터 분석' 카테고리의 다른 글
[시각화 도구/Matplotlib - 기본 그래프 도구] 히스토그램 (0) | 2022.11.17 |
---|---|
[시각화 도구/Matplotlib - 기본 그래프 도구] 막대 그래프 (1) | 2022.11.16 |
[시각화 도구/Matplotlib - 기본 그래프 도구] 선 그래프 (0) | 2022.11.08 |
[데이터 살펴보기/판다스 내장 그래프 도구 활용] (0) | 2022.10.28 |
[데이터 살펴보기/통계 함수 적용] 상관계수 (0) | 2022.10.28 |