본문 바로가기
카테고리 없음

[혼공분석] 5주차_데이터 시각화

by netsgo 2024. 8. 14.

 

 

[한빛미디어] 혼자 공부하는 데이터 분석 with 파이썬

좋은 개발자는 컴퓨터를 분석의 대상으로 바라볼 뿐, 두려워하지 않는다!‘전공서가 너무 어려워서 쉽게 배우고 싶을 때’, ‘개발자가 되고 싶은데 뭐부터 봐야 하는지 모를 때’ ‘기술 면접

hongong.hanbit.co.kr

 

Matplotlib 기본 요소

Figure 객체

Matplotlib에는 Figure라는 모든 그래프 구성 요소를 담고 있는 최상위 객체가 있다. figure() 함수로 명시적으로 Figure 객체를 만들어 활용하면 다양한 그래프 옵션을 조절할 수 있다.

 

그래프 크기 바꾸기

figure() 함수를 사용하여 Figure 객체를 만들면 그래프 옵션을 조절할 수 있다 figsize 매개변수에 그래프의 크기를 튜플로 지정할 수 있는데, 기본 그래프의 크기는 (6, 4)이고 단위는 inch이다.

import matplotlib.pyplot as plt

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

 


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

하나의 Figure 객체 안에는 여러 개의 subplot을 담을 수 있다. subplot이란 matplotlib의 Axes 클래스의 객체를 말하며 하나의 subplot은 두 개 이상의 축을 포함한다. 각 축에는 눈금 또는 틱이 표시된다. 또 축의 이름을 나타내는 레이블이 있다.

 

matplotlib의 Axes 클래스는 2D 플롯의 모든 요소를 포함하는 객체를 나타낸다. 이 클래스는 matplotlib의 핵심 구성 요소 중 하나이며, 플롯이 표현되는 "축"을 관리한다. Axes 객체는 플롯의 좌표계를 정의하고, 그래프의 데이터를 표시하는 데 필요한 메서드들을 포함한다.

Axes 클래스에는 특별히 '객체'라고 부를 만한 여러 가지 타입이 있지만, Axes 자체가 다양한 플롯의 형식을 나타낼 수 있는 방법을 제공하는 일종의 기반 클래스입니다. 이 클래스에서 파생된 주요 객체들은 주로 2D 그래프나 3D 그래프에서 활용되며, 각각의 객체는 다양한 플롯 유형을 생성하는 데 사용된다. 

 

# plt.subplots(nrows=2, ncols=1)와 같은 의미로 해석되어 2행 1열의 배열로 서브플롯을 생성
fig, axs = plt.subplpots(2)

axs[0].scatter(ns_bppl7['도서권수'], ns_book7['대출건수'], alpha = 0.1)
axs[0].set_title('scatter plot')
axs[1].hist(ns_book7['대출건수'], bins = 100)
axs[1].set_title('histogram')
axx[1].set_yscale('log')
fig.show()

 

 

  • fig: 전체 그림을 나타내는 Figure 객체이다. 이 객체는 서브플롯을 포함하는 캔버스를 의미하며, 전체 플롯을 관리하는 역할을 한다.
  • axs: 2개의 Axes 객체가 담긴 넘파이 배열이다. 이 배열의 각 요소는 개별 서브플롯을 참조한다.
    • axs[0]: 첫 번째 서브플롯에 대한 Axes 객체
    • axs[1]: 두 번째 서브플롯에 대한 Axes 객체

 

 

서브플롯을 가로로 출력하기

subplot() 함수에 행과 열을 지정하면 원하는 구조의 Figure 객체를 만들 수 있다.

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

axs[0].scatter(ns_book7['도서권수'], ns_book7['대출건수'], alpha = 0.1)
axs[0].set_title('scatter plot')
axs[0].set_xlable('number of books')
axs[0].set_ylable('borrow count')

axs[1].hist(ns_book7['대출건수'], bins = 100)
axs[1].set_title('histogram')
axs[1].set_xlabel('number of books')
axs[1].set_ylabel('borrow count')
axs[1].y_scale('log')

fig.show()


선 그래프와 막대 그래프

선 그래프 그리기(plot() 함수)

  • matplotlib의 plot() 함수는 선 그래프를 그릴 수 있다. 첫 번째 매개변수에는 x축의 값, 두 번째 매개변수에는 y축의 값을 전달한다.
  • 서브플롯을 사용하지 않을 때는 그래프의 제목과 x축, y축의 이름은 각각 title(), xlable(), ylable() 함수로 지정한다.
  • 선 모양은 linestyle() 매개변수를 사용한다.
  • color 매개변수를 사용하여 색상을 지정한다.
  • maker 매개변수도 제공한다.
  • 선 그래프의 눈금 개수는 xticks() 함수를 사용한다.(plt.xticks(range(1947, 2030, 10)))
  • 그래프에 값을 표시할 때는 annotate() 함수를 사용한다. 첫 번째 매개변수에는 그래프에 나타낼 문자를 지정하고, 두 번째 매개변수에는 문자열이 나타날 x, y 좌표를 튜플로 지정한다. 텍스트의 위치를 조절하기 위해 xytext 매개변수를 사용할 수 있다. xytext 매개변수와 함께 textcoords 매개변수를 사용하면 포인트 단위의 상대 위치를 나타내는' offset points'를 지정할 수 있다.
plt.plot(count_by_year, '*-g')
plt.title('Books by year')
plt.xlabel('year')
plt.ylabel('number of books')
plt.xticks(range(1947, 2030, 10))
for ids, val in count_by_year[::5].items()
	plt.annotate(val, (idx, val), xytext = (2, 2), textcoords = 'offset points')

plt.show()

 

 

막대 그래프 그리기(bar() 함수)

  • bar() 함수에 x축의 값, y축의 값을 전달한다.
  • 텍스트 위치 조절은 annotate() 함수의 ha 매개변수에 'center'를 지정한다.
  • fontsize 매개변수로 텍스트의 크기를 조절한다.
  • 텍스트의 색깔은 color 매개변수를 사용한다.
  • bar() 함수의 막대의 두께는 width 매개변수를 사용한다.
  • color 매개변수로 색상을 지정할 수 있다.
  • 가로 막대 그래프는 barh() 함수를 사용한다.
  • 가로 막대 그래프에서 막대의 두께는 height 매개변수를 사용한다.
  • 가로 막대 그래프의 텍스트 위치는 annotate() 함수에서 va 매개변수를 사용한다.
plt.bar(count_by_subject.index, count_by_subject.values, width = 0.7, color = 'blue')
plt.title('Books by subject')
plt.xlabel('subject')
plt.ylabel('number of books')
plt.xticks(range(1947, 2030, 10))
for ids, val in count_by_year[::5].items()
	plt.annotate(val, (idx, val), xytext = (0, 2), textcoords = 'offset points', fontsize = 8, va = 'center', color = 'green')

plt.show()

 

plt.barh(count_by_subject.index, count_by_subject.values, height = 0.7, color = 'blue')
plt.title('Books by subject')
plt.xlabel('number of books')
plt.ylabel('subject')
plt.xticks(range(1947, 2030, 10))
for ids, val in count_by_year[::5].items()
	plt.annotate(val, (val, idx), xytext = (2, 0), textcoords = 'offset points', fontsize = 8, va = 'center', color = 'green')

plt.show()