DA 4

Tae Yoon·2024년 1월 9일
0

맷플롯립 기본 요소 알아보기

Figure 객체

맷플롯립에는 Figure라는 모든 그래프 구성 요소를 담고 있는 최상위 객체가 있다
figure() 함수로 다양한 그래프 옵션을 조정할 수 있다

그래프 크기 바꾸기: figsize 매개변수

figsize 매개변수에 그래프의 크기를 튜플로 지정할 수 있다
기본 그래프 크기는 (6,4)이고 너비와 높이에 해당

plt.figure(figsize=(9,6))
plt.scatter(ns_book7['도서권수'],ns_book7['대출건수'], alpha=0.1)
plt.show()

그래프 실제 크기 확인하기

DPI 1인치를 몇 개의 픽셀로 표현하는지 나타낸다
DPI에 때라 화면에 그려지는 그래프 크기가 달라진다
맷플롯립의 기본 DPI는 72이다
픽셀 값을 DPI 값으로 나누면 인치 값을 구할 수 있다

plt.figure(figsize=(900/72,600/72))

코랩 노트북의 타이트 레이아웃을 사용하지 않으려면 맷플롯립 그래프를 그릴 때 bbox_inches 옵션을 None으로 지정

%config InlineBackend.print_figure_kwargs ={'bbox_inches':None}

그래프 크기 바꾸기: dpi 매개변수

plt.figure(dpi=144)

rcParams 객체

rcParams는 맷플롯립 그래프의 기본값을 관리하는 객체

DPI 기본값 바꾸기

plt.rcParams['figure.dpi']=100

산점도 마커 모양 바꾸기

산점도 그래프의 마커 기본값을 확인하려면 rcParams 객체의 속성을 scatter.marker로 지정
plt.rcParams['scatter.marker']
별 모양으로 그리려면 plt.rcParams['scatter.marker']='*'
산점도마다 마커를 다르게 그려야 한다면 기본값을 수정하는 것 대신 scatter() 함수의 marker 매개변수로 마커의 모양을 지정

plt.scatter(ns_book7['도서권수'], ns_book7['대출건수'], alpha=0.1, marker='*')
plt.show()

여러 개의 서브플롯 출력하기

하나의 피겨 객체안에는 여려 개의 서브플롯을 담을 수 있다
맷플롯립의 Axes 클래스의 객체를 말하며 하나의 서브플롯은 두 개 이상의 축을 포함한다

서브플롯 그리기: subplots() 함수

서브플롯을 정의하려면 subplots() 함수에 원하는 서브 플롯 개수를 지정하면 된다

fig,axs=plt.subplots(2)
axs[0].scatter(ns_book7['도서권수'],ns_book7['대출건수'],alpha=0.1)
axs[1].hist(ns_book7['대출건수'], bins=100)
axs[1].set_yscale('log')
fig.show()
# axs[0]은 첫 번째 그래프, axs[1]은 두 번째 그래프

subplots() 함수도 피겨 크기를 지정할 수 있는 figsize 매개변수를 제공

fig,axs=plt.subplots(2,figsize=(6,8))

set_title() 메서드를 사용해서 각 그래프에 제목도 넣을 수 있다

axs[0].set_title('scatter plot')

서브플롯을 가로로 나란히 출력하기

subplots() 함수에 행과 열을 지정하면 원하는 서브플롯 개수의 피겨를 만들 수 있다
subplots() 함수의 첫 번째 매개변수는 서브플롯 행의 개수이고 두 번째 매개변수는 열의 개수
subplots(2)에서 2는 행을 의미

fig,axs=plt.subplots(1,2,figsize=(10,4))

set_xlabel() 메서드와 set_ylabel() 메서드를 사용해 서브플롯의 축 이름도 지정할 수 있다

axs[0].set_xlabel('number of books')
axs[0].set_ylabel('borrow count')

선 그래프와 막대 그래프 그리기

value_counts() 메서드는 고유한 값의 등장 횟수를 계산
count_by_year=ns_book7['발행년도'].value_counts()
sort_index() 메서드는 인덱스 기준으로 오름차순 정렬한다

count_by_year=count_by_year.sort_index()

선 그래프 그리기

맷플롯립의 plot() 함수는 선 그래프를 그릴 수 있다.
첫 번째 매개변수에는 x축의 값, 두 번째 매개변수에는 y축에 해당하는 값을 전달
서브플롯을 사용하지 않을 때는 그래프 제목은 title() 함수 ex) plt.title('Book by year')
x축 이름과 y축 이름은 xlabel() 함수와 ylabel() 함수 사용 ex) plt.xlabel('year')

선 모양과 색상 바꾸기

plot() 함수는 선 모양을 지정할 수 있는 linestyle 매개변수를 제공, 기본값은 실선을 나타내는 '-'
실선: '-', 점선: ':', 쇄선: '-.', 파선: '--'
color 매개변수에 색상을 지정할 수 있다
marker 매개변수도 제공

plt.plot(count_by_year, marker='.', linestyle=':', color='red')

다른 ex)

plt.plot(count_by_year, '.:r')

선 그래프 눈금 개수 조절 및 마커에 텍스트 표시하기

x축 눈금을 지정할 때는 xticks() 함수 사용, y축 눈금을 지정할 때는 yticks() 함수 사용
서브플롯을 그릴 때 x축과 y축 눈금을 지정하려면 각각 set_xticks() 메서드와 set_yticks() 메서드 사용
items() 메서드를 사용하면 인덱스와 값을 감싼 튜플을 얻을 수 있다
그래프에 값을 표시할 때는 annotate() 함수를 사용. 첫 번째 매개변수에 그래프에 나타낼 문자열, 두 번째 매개변수에 문자열이 나타날 x,y좌표를 튜플로 지정
텍스트를 마커에서 조금 떼어 놓으려면 텍스트 위치를 조절하는 xytext 매개변수를 사용
xytext를 사용해서 거의 차이가 없을 경우 상대적인 위치를 포인트나 픽셀 단위로 지정해야 한다. xytext 매개변수와 함께 textcoords 매개변수를 사용
textcoords 매개변수에 포인트 단위의 상대 위치를 나타내는 'offset points'를 지정

plt.xticks(range(1947, 2030, 10))
for idx, val in count_by_year[::5].items():
	plt.annotate(val, (idx, val), xytext=(2,2), textcoords='offset points') 
#여기서 val은 그래프에 나타낼 문자열 (idx, val)은 텍스트가 나타낼 x,y 좌표

막대 그래프 그리기

맷플롯립에서 bar() 함수는 막대 그래프를 그린다

텍스트 정렬, 막대 조절 및 색상 바꾸기

텍스트 위치 조절은 annotate() 함수의 ha 매개변수에 'center'를 지정. 기본값이 'right'
텍스트가 서로 겹치는 경우에 fontsize 매개변수로 텍스트 크기 줄여 준다

plt.bar(count_by_subject.index, count_by_subject.values )
plt.title('Book by year')
plt.xlabel('subject')
plt.ylabel('number of books')
for idx, val in count_by_subject.items():
	plt.annotate(val, (idx, val), xytext=(0,2),\
    textcoords='offset points',fontsize=8, ha='center',color='green')
plt.show()

가로 막대 그래프 그리기 barh() 함수

barh() 함수에서 막대의 두께를 나타내는 매개변수는 width가 아니라 height 매개변수 사용
x축과 y축의 이름을 바꾸어 써야한다
annotate() 함수에 텍스트 좌표를 쓸 때도 x축과 y축 값이 바뀐다 (idx,val)이 아니라 (val,idx)로 써야한다
가로 막대 그래프에선 ha 매개변수대신 va 매개변수 사용

plt.barh(count_by_subject.index, count_by_subject.values )
plt.title('Book by year')
plt.ylabel('subject')
plt.xlabel('number of books')
for idx, val in count_by_subject.items():
	plt.annotate(val, (val, idx), xytext=(2,0), \
    textcoords='offset points',fontsize=8, va='center',color='green')
plt.show()

0개의 댓글

관련 채용 정보