Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Algorithm
- 노마드코딩
- 코딩테스트
- Stack
- 알고리즘
- MySQL
- 백준
- NumPy
- 알고리즘 스터디
- pandas
- aws jupyter notebook
- programmers
- Join
- python
- 프로그래머스
- 선그래프
- String Method
- 알고리즘스터디
- queue
- javascript
- 데이터시각화
- 가상환경
- type hint
- 파이썬
- 정보처리기사 c언어
- openCV
- Selenium
- 자료구조
- Matplotlib
- dataframe
Archives
- Today
- Total
조금씩 꾸준히 완성을 향해
[Matplotlib] 다양한 그래프 그리기(면적그래프, 막대그래프, 보조축 활용) 본문
면적 그래프
- Area plot : 각 열의 데이터를 선 그래프로 구현 후 선 그래프와 x축 공간에 색을 입힌다.
- 색의 투명도(alpha)는 기본값 0.5로 투과되어 보임(투명도 0~1범위)
- plot(kind='area')
- stacked=True : 그래프를 누적할지 여부 설정
df_4.plot(kind='area', stacked=False, alpha=0.3, figsize=(15, 7))
plt.title('서울 -> 타시도 인구 이동', fontproperties=mg_20)
plt.ylabel('이동 인구 수',fontproperties=mg_15)
plt.xlabel('기간', fontproperties=mg_15)
plt.legend(loc='best', prop=mg_10)
plt.show()
# stacked=True인 면적그래프 객체를 ax 객체로 설정하여 세부적인 요소 설정
# 면적 그래프 axe 객체 생성
ax = df_4.plot(kind='area', stacked=True, alpha=0.2, figsize=(15, 7))
# axe 객체 설정 변경
ax.set_title('서울 -> 타시도 인구 이동', fontproperties=mg_30, color='brown', weight='bold')
ax.set_ylabel('이동 인구 수', fontproperties=mg_20, color='blue')
ax.set_xlabel('기간', fontproperties=mg_20, color='blue')
ax.legend(loc='best', prop=mg_15)
plt.show()
막대 그래프
- 데이터 값의 크기에 비례하여 높이를 갖는 직사각형 막대로 표현
- 막대 높이의 상대적 길이 차이를 통해 데이터 분석
▶ 세로형 막대그래프
- plot(kind='bar')
- 정보 제공 측면에서 선그래프와 큰 차이 없음
- 세로형 막대 그래프는 시간적으로 차이가 나는 두 점에서 데이터 값의 차이를 잘 설명해줌
- 즉, 시계열 데이터를 표현하는 데 적합
df_4.head(4) #사용할 데이터 확인
df_4.loc['2010':].plot(kind='bar', figsize=(15, 7), width=0.7,
color=['orange', 'olive', 'skyblue', 'pink'])
plt.ylim(0,30000)
plt.title('서울 -> 타시도 인구 이동', fontproperties=mg_20)
plt.ylabel('이동 인구 수',fontproperties=mg_15)
plt.xlabel('기간', fontproperties=mg_15)
plt.xticks(rotation=70)
plt.legend(loc='best', prop=mg_10)
plt.show()
▶ 가로형 막대그래프
- plot(kind='barh')
- 각 변수 사이 값의 크기 차이를 설명하는 데 적합
* 2010~2017년 서울에서 각 시도로 이동한 인구의 합계를 비교
# 2010년~2017년 서울에서 4개 지역으로 이동한 데이터 추출
col_years = list(map(str, range(2010, 2018)))
df_4 = df_seoul.loc[['충청남도','경상북도', '강원도', '전라남도'], col_years]
print(df_4.head(5))
# 합계 열 추가 후, 변수로 저장
df_4['합계'] = df_4.sum(axis=1)
df_total = df_4[['합계']].sort_values(by='합계', ascending=True) # 가장 큰 값부터 정렬
col_years = list(map(str, range(2010, 2018)))
df_4 = df_seoul.loc[['충청남도','경상북도', '강원도', '전라남도'], col_years]
print(df_4.head(5))
df_4['합계'] = df_4.sum(axis=1)
df_total = df_4[['합계']].sort_values(by='합계', ascending=True) # 가장 큰 값부터 정렬
df_total.plot(kind='barh', color='cornflowerblue', width=0.5, figsize=(10, 5))
plt.yticks(fontproperties=mg_10)
plt.title('서울 -> 타시도 인구 이동', fontproperties=mg_30)
plt.ylabel('전입지', fontproperties=mg_20)
plt.xlabel('이동 인구 수', fontproperties=mg_20)
plt.legend(loc='best',prop=mg_15)
plt.show()
보조축 활용
보조축을 추가하여 2개의 y축을 갖는 그래프 생성
df.head(5) #사용할 데이터 확인
▶ shift() : 총발전량 열의 데이터를 1행씩 뒤로 이동시켜서 총발전량-1 열을 새로 생성
df['총발전량-1년'] = df['총발전량'].shift(1)
df.head(5)
# 발전량 증감률 계산해서 추가
df['증감률']= df['총발전량']/df['총발전량-1년']*100-100
df.head(5)
▶ twinx() 메소드 : 쌍둥이 객체 생성 후 ax2에 저장
ax1 = df[['수력', '화력']].plot(kind='bar', stacked=True, figsize=(15,8))
ax2 = ax1.twinx() #쌍둥이 객체 생성
ax2.plot(df.index, df['증감률'].values, ls='--', color='green', marker='o',markersize=10 )
ax1.set_ylim(0,500)
ax2.set_ylim(-50, 50)
ax1.set_xlabel('연도', fontproperties=mg_15)
ax1.set_ylabel('발전량(억 kWh', fontproperties=mg_15)
ax2.set_ylabel('전년 대비 증감률(%)', fontproperties=mg_15)
plt.title('북한 전력 발전량', fontproperties=mg_20)
ax1.legend(loc='best', prop=mg_15)
plt.show()
'Python > 데이터 시각화' 카테고리의 다른 글
[Seaborn] 다양한 그래프 그리기2 (pie chart, boxplot, heatmap, stripplot, swarmplot, barplot, countplot) (0) | 2022.10.01 |
---|---|
[Seaborn] 다양한 그래프 그리기1 (regplot, distplot, histogram, scatter plot) (0) | 2022.10.01 |
[Matplotlib] 그래프 여러개 그리기(화면 분할/그래프 분할) (0) | 2022.10.01 |
[Matplotlib] 그래프 주석 달기 & 마커 지정 (0) | 2022.09.30 |
[Matplotlib] 그래프 스타일 지정 (그래프 디자인 변경) (0) | 2022.09.30 |