pyplot 방식과 객체지향 API 방식
- pyplot 방식: matplotlib.pyplot에 있는 함수를 사용
- 객체지향 API 방식: 피겨 객체와 서브플롯 객체를 만들고 이 객체의 메서드를 사용
pyplot() 방식으로 그려보기
- matplotlib.pyplot에 있는 함수를 사용하면 함수들이 하나의 피겨 객체에 대한 상태를 공유한다.
- plot() 함수와 title() 함수가 동일한 피겨 객체에 적용되는 모습을 확인할 수 있다.
- plot()함수에 하나의 리스트만 전달시 plot()함수는 해당 리스트를 y축의 값으로 인식하고 해당 리스트의 인덱스 값을 x축 값으로 사용한다.
객체지향 API 방식으로 그래프 그리기
- 객체지향 API 방식으로 그래프를 그릴시, 하나의 axes() 객체를 가지는 피겨를 생성한다.
- 주로 여러 개의 서브플롯을 추가하는 등 복잡한 그래프를 그리는 경우에 객체지향 방식을 사용하는 것이 좋다.
그래프에 한글 출력하기
#나눔고딕 폰트 사용
plt.rcParams['font.family'] = 'NanumGothic'
plt.rc('font',family='NanumBarunGothic',size=11)
- font.family 속성을 이용해 사용하고자 하는 폰트를 지정할 수 있다.
- 마찬가지로 rc('font' ,family = '사용하고자 하는 폰트', 하위속성) 으로 폰트를 지정할 수 있다.
출판사별 발행 도서 개수 산점도 그리기
import gdown
gdown.download('https://bit.ly/3pK7iuu','ns_book7.csv',quiet=False)
import pandas as pd
ns_book7 = pd.read_csv('ns_book7.csv',low_memory=False)
ns_book7.head()
#고유한 출판사 목록 만들기
top30_pubs = ns_book7['출판사'].value_counts()[:30] #상위 30개 출판사 출력
#불리언 인덱스 만들기
top30_pubs_idx = ns_book7['출판사'].isin(top30_pubs.index)
- value_counts() 메서드를 사용하여 상위 30개 출판사를 가져왔다.
- isin() 메서드는 불리언 인덱스를 만들어주는데 여기서는 상위 30개에 해당하는 출판사는 참으로, 아닌 출판사는 거짓으로 반환하게 하였다.
- sample() 함수는 데이터프레임의 행을 무작위로 선택한다.
- 첫 번째 매개변수에는 선택할 행 개수를 지정, 이후 random_state 매개변수에 임의의 숫자를 작성한다.
산점도 그리기
ax.scatter(ns_book8['발행년도'],ns_book8['출판사'], s= ns_book8['대출건수'])
- s 매개변수는 마커의 크기를 지정할 수 있게 해준다.
- '대출건수' 열을 마커 크기로 전달하게 되면 대출건수가 많은 도서를 크게 그릴 수 있다.
마커 꾸미기
- 투명도 조절
- alpha 매개변수로 지정할 수 있다.
- 마커 테두리 색 변경
- edgecolor 매개변수로 마커 테두리의 색을 지정할 수 있다. 기본값을 마커의 색을 의미하는 'face' 이다.
- 주로 여러 개의 마커가 겹칠 때 경계 구분 용으로 사용하기 좋다.
- 마커 테두리 색 두께 변경
- linewidths 매개변수로 지정할 수 있다.
- 산점도 색 변경
- c 매개변수로 지정할 수 있다. s 매개변수와 마찬가지로 데이터 개수와 동일한 길이의 배열을 전달시 각 데이터를 다른 색깔로 그릴 수 있다.
값에 따라 색상 표현: 컬러맵
컬러맵 레퍼런스 : https://matplotlib.org/stable/gallery/color/colormap_reference.html
- cmap 매개변수로 컬러맵을 jet으로 설정하였다.
- 참조 정보를 제공하는 컬러 막대 그래프를 산점도 그래프의 새 변수로 받아, 그렸다.
하나의 피겨에 여러 개의 선 그래프 그리기
- 데이터 정제
- 상위 5개의 출판사가 선택되게 for 문과 슬라이스 연산자를 사용했다.
- x축은 1985년~2025년으로 범위를 지정하였다.
스택 영역 그래프
- 스택 영역 그래프란 하나의 선 그래프 위에 다른 선 그래프를 차례대로 쌓는 것으로,
그래프 사이의 간격이 y축 값이 된다. - stackplot() 메서드를 사용한다.
- 데이터 정제
- pivot_table() 메서드로 각 발행년도 열의 값을 열로 바꾼다. pivot_table( index 매개변수, columns 매개변수 )
- get_level_balues() 메서드로 발행년도 열을 리스트 형태로 바꾼다.
해당 메서드는 다단으로 구성된 열 이름에서 선택한 항목만 가져올 수 있다. - stackplot() 메서드로 스택 영역 그래프를 그린다.
- 데이터프레임을 가져올 시 fillna() 메서드를 사용하는 이유
- 판다스 데이터프레임의 누락값을 제대로 처리하지 못하기 때문에 누락값을 0으로 채운다.
여러 개의 막대 그래프 그리기
- 막대 그래프를 나란히 그리게 하기 위해서는 막대의 두께를 줄이고 너비를 이동시키면 된다.
스택 막대 그래프
- 스택 막대 그래프는 bottom 매개변수를 사용하여 수동으로 막대를 쌓을 수 있다.
- height2는 height 위에 쌓이는 형태이다. bottom =height를 통해 알 수 있다.
데이터값 누적하여 그리기
- cumsum() 메서드를 사용하여 값을 누적할 수 있다.
- 민음사 행을 주목하면 두 그림의 차이점을 확인할 수 있다.
- 데이터값을 누적하여 그릴 때는 가장 큰 막대를 먼저 그림으로써, 이전에 그린 막대가 모두 덮이는 일이 일어나지 않도록 해야 한다.
- reversed()함수를 사용해 인덱스의 역순으로 반복하여 그리게 하였다.
원 그래프
- 원 그래프는 pie() 메서드로 그릴 수 있다.
- labels 매개 변수에는 원의 부채꼴 위에 표시할 데이터 값을 전달할 수 있다.
- startangle 매개변수는 원 그래프의 시작 위치를 지정할 수 있다.
- pie() 메서드의 autopct 매개변수에는 파이썬의 % 연산자에 적용할 포맷팅 문자열을 전달할 수 있다.
- explode 매개변수에는 떨어뜨리길 원하는 조각의 간격을 반지름의 비율로 지정할 수 있다.
- explode 매개변수에 전달하는 리스트 길이는 data 배열의 길이와 같아야 한다.
여러 종류가 있는 서브플롯 그려보기
fig,axes = plt.subplots(2,2,figsize = (20,16))
ns_book8 = ns_book7[top30_pubs_idx].sample(1000,random_state =42)
sc = axes[0,0].scatter(ns_book8['발행년도'],ns_book8['출판사'], linewidths=0.5, edgecolors= 'k', alpha=0.3, s =ns_book8['대출건수'],c = ns_book8['대출건수'], cmap='jet')
axes[0,0].set_title('출판사별 발행 도서')
fig.colorbar(sc, ax=axes[0,0])
axes[0,1].stackplot(year_cols, ns_book10.loc[top10_pubs].fillna(0),
labels= top10_pubs)
axes[0,1].set_title('연도별 대출건수')
axes[0,1].legend(loc='upper left')
axes[0,1].set_xlim(1985,2025)
for i in reversed(range(len(ns_book12))):
bar = ns_book12.iloc[i]
label = ns_book12.index[i]
axes[1,0].bar(year_cols,bar, label=label)
axes[1,0].set_title('연도별 대출건수')
axes[1,0].legend(loc='upper left')
axes[1,0].set_xlim(1985,2025)
axes[1,1].pie(data,labels=labels, startangle =90,
autopct = '%.1f%%', explode = [0.1]+[0]*9)
axes[1,1].set_title('출판사 도서 비율')
fig.savefig('all_in_one.png')
fig.show()
- 위 코드로 2X2 형태의 서브플롯에 산점도, 스택 영역 그래프, 스택 막대 그래프, 원 그래프를 순서대로 그릴 수 있다.
숙제
'공부 > python' 카테고리의 다른 글
혼공학습단 12기를 마치며.. (0) | 2024.08.18 |
---|---|
혼자 공부하는 데이터 분석 5주차: 데이터 시각화하기 (0) | 2024.08.11 |
혼자 공부하는 데이터 분석 4주차: 데이터 요약하기 (0) | 2024.07.28 |
혼자 공부하는 데이터 분석 3주차: 데이터 정제하기 (0) | 2024.07.21 |
혼자 공부하는 데이터 분석 2주차: 데이터 수집하기 (0) | 2024.07.14 |