matplotlib.pyplot
에 있는 함수를 사용하는 pyplot 방식, 명시적으로 피겨 객체와 서브플롯 객체를 만들고 이 객체의 메서드를 사용하는 객체지향 API 방식이 있습니다.
matplotlib.pyplot
에 있는 함수를 사용하면 함수들이 하나의 피겨 객체에 대한 상태를 공유
fig, ax = plt.subplots()
ax.plot([1, 4, 9, 16])
ax.set_title('simple line graph')
fig.show()
fig라는 틀에 ax라는 종이를 놓고 그 위에 그래프를 그린다고 생각합시다.
복잡한 그래프를 그리는 경우 객체지향 방식을 사용하는 것이 좋습니다.
코랩의 경우 아래 코드를 실행하여 나눔 폰트를 설치할 수 있습니다.
# 노트북이 코랩에서 실행 중인지 체크합니다.
import sys
if 'google.colab' in sys.modules:
!echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
# 나눔 폰트를 설치합니다.
!sudo apt-get -qq -y install fonts-nanum
import matplotlib.font_manager as fm
font_files = fm.findSystemFonts(fontpaths=['/usr/share/fonts/truetype/nanum'])
for fpath in font_files:
fm.fontManager.addfont(fpath)
나눔 폰트를 설치한 후 다시 맷플롯립을 다시 임포트하고 DPI 기본값을 변경
import matplotlib.pyplot as plt
plt.rcParams['figure.dpi'] = 100
font.family
속성rcParams
객체의 font.family
속성에 저장되어 있습니다.
plt.rcParams['font.family'] = 'NanumGothic'
rc()
함수rc()
함수의 첫번째 매개변수에는 설정할 그룹을 지정 ('font')
family
는 그룹의 하위 속성을 지정
plt.rc('font', family='NanumBarunGothic', size=11)
value_counts()
메서드를 사용해 고유한 출판사 목록을 만듭니다.
isin()
메서드를 사용해 상위 30개 출판사에 해당하는지 불리언 인덱스 만들기
1000개만 무작위로 선택 - sample()
메서드
scatter()
함수는 마커의 크기를 지정할 수 있는 s
매개변수를 제공
rcParams['lines.markersize']
로 지정하며 기본값은 6
1) 투명도 조절하기 - alpha
매개변수
2) 마커 테두리 색 바꾸기 - edgecolor
매개변수
3) 마커 테두리 선 두께 바꾸기 - linewidths
매개변수
4) 산점도 색 바꾸기 - c
매개변수
기본값은 viridis
컬러맵
자주 사용하는 컬러맵 중의 하나는 jet
컬러맵은 cmap
매개변수로 지정할 수 있고, 컬러 막대는 scatter()
함수가 반환하는 객체를 colorbar()
메서드에 전달하면 됩니다.
groupby()
메서드를 사용해 '출판사'와 '발행년도' 열을 기준으로 행을 모은 후 sum()
메서드로 '대출건수 열의 합을 구해 줍시다.
인덱스를 초기화하기 위해 reset_index()
메서드를 호출
plot()
함수를 2번 호출
그래프에 범례를 추가하려면 각 선 그래프에 label
매개변수를 이용
마지막에 legend()
메서드를 호출
출력할 x축의 좌표 범위를 지정하려면 set_xlim()
메서드를 사용,
비슷하게 set_ylim()
메서드는 y축의 좌표 범위를 지정할 수 있음
pivot_table()
메서드로 각 '발행년도' 열의 값을 열로 바꾸기index
, columns
매개변수에 원본 데이터프레임의 열을 지정하면 각 열의 고유한 값이 피벗 테이블로 변환된 데이터프레임의 인덱스와 열이 됩니다.
ns_book10 = ns_book9.pivot_table(index='출판사', columns='발행년도')
ns_book10.head()
get_level_values()
메서드는 다단으로 구성된 열 이름에서 선택한 항목만 가져올 수 있습니다.
top10_pubs = top30_pubs.index[:10]
year_cols = ns_book10.columns.get_level_values(1)
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)
fig.show()
막대 그래프를 여러 개 그리는 방법도 bar()
메서드를 여러 번 호출
나란히 옆으로 그리려면 막대의 기본 너비를 0.4로 반으로 줄인 다음 x축에서 막대 하나 너비인 0.4의 절반인 0.2씩 떨어지도록 그려봅시다.
맷플롯립에는 막대 그래프를 쌓을 수 없어서 bar()
메서드의 bottom
매개변수를 사용하여 막대를 쌓아 올리거나,
y축 방향으로 데이터값을 누적하여 그려야 합니다.
판다스의 cumsum()
메서드를 사용하여 값을 누적하여 그려봅시다.
주의할 점은 가장 큰 막대를 먼저 그려야 함
3시 방향부터 반시계 방향으로 그려지지만, 크기 순으로 정렬되어 있지 않은 데이터를 사용했다면 가시성이 많이 떨어집니다.
startangle
매개변수를 지정하면 12시 방향부터 그릴 수 있음
autopct
매개변수에 파이썬의 %연산자에 적용할 포맷팅 문자열을 전달할 수 있음
explode
매개변수에 떨어뜨리길 원하는 조각의 간격을 반지름의 비율로 지정할 수 있음
앞에서 그렸던 그래프를 한 프레임에 모두 그려 봅시다.
plt.subplots()
함수의 매개변수에 행, 열 개수를 지정할 수 있으며
subplots()
함수에서 반환 받은 Axes 객체를 사용해 각 격자의 위치를 지정해 그 안에 그림을 넣을 수 있음