[Matplotlib] Matplotlib을 이용한 그래프 그리기
Matplotlib
: 막대 그래프, 선 그래프, 히스토그램 등의 그래프를 매우 편하고 빠르게 그릴 수 있는 기능 제공
: pandas의 필터링 기능과 함께 쓴다면 더욱 다양한 차트를 그릴 수 있음!
: 또한, 반복문을 사용할 수 있기 때문에 같은 종류의 그래프를 반복적으로 그려야 하는 상황에서 적합
기본 그래프 그리기
: 다양한 그래프를 그리는 기능 제공, 함수와 함수의 인자인 plot, scatter, bar, pie, hist 함수 & 엑셀 데이터를 불러와 그래프 그리기
- Matplotlob 기초 문법
: matplotlib은 파이썬에서 데이터를 시각화하는데 쓰는 모듈로, 이 모듈에 속한 pyplot 이라는 세부 모듈을 이용하여 그래프를 그린다.
: pyplot의 그래프를 그려주는 함수는 x축에 들어갈 값의 배열과 y축에 들어갈 값의 배열을 입력으로 받는다.
: pyplot 의 show 함수는 지금까지 그린 그래프를 출력하는 기능 => 하나의 그림에서 나타나게 됨!
: pyplot 의 clf 함수는 지금까지 그린 그래프를 모두 초기화 하는 기능
- 선 그래프 : plot 함수
: 선 그래프를 그리는데 사용하는 함수 plot, x축에 들어갈 배열, y축에 들어갈 배열, 색상, 선 스타일을 입력으로 받음.( 색상과 선스타일은 필수적으로 입력할 필요가 없음!)
from matplotlib import pyplot as plt
X = [1,2,3,4,5]
Y = [10,20,30,20,40]
plt.plot()
plt.show()
: 선의 색상] 색상의 이름 혹은 색상을 나타내는 16진수 코드 등 다양한 형태로 입력 가능
: 선 스타일] solid, dashed, dashdot, dotted 중 하나로 입력, 축약형으로는 -,--,-,:
[plot 함수 활용하여 시간에 따른 판매량 그래프 실습]
from matplotlib import pyplot as plt
import pandas as pd
df = pd.read_csv('http://www.innocoding.co.kr/python_5-1.csv', engine= 'python')
plt.plot(df['월], df['판매량'])
plt.show()
- 산점도 : scatter 함수
: scatter 함수로, X축에 들어갈 배열, Y축에 들어갈 배열, 색상, 점 스타일, 점 크기로 입력을 받는다.
: 마찬가지로 색상, 점 스타일, 점 크기는 필수 요소가 아님!
: 점 스타일로는 'o', '.', ',', 'x', '+', 'v', '^', '<', '>', 's', 'd' 가 있고, 's'는 직사각형 모양, 'd'는 다이아몬드 모양을 나타냄!
from matplotlib import pyplot as plt
X = [1,2,3,4,5]
Y = [10,20,30,20,40]
plt.scatter(X,Y,color = 'red', marker = 'o', s = 50)
plt.show()
[scatter 함수를 활용하여 기온에 따른 판매량 그래프 실습]
from matplotlib import pyplot as plt
import pandas as pd
df = pd.read_csv('http://www.innocoding.co.kr/python_5-2.xlsx', engine= 'python')
plt.scatter(df['기온'],df['판매량'], color = 'red', marker = '+', s = 30)
plt.show()
- 막대 그래프 : bar 함수
: 막대 그래프를 그리는데 사용하는 함수, bar()로, x축에 들어갈 배열, 높이, 색상, 선 색상 입력으로 받음!
: 선 색상은 none을 입력 받을 수 있고, 이때는 선이 그려지지 않음
from matplotloib import pyplot as plt
plt.bar(['A','B','C'],height = [8,6,10], color = 'red', edgecolor = 'black')
plt.show()
[각 단어별 빈도를 시각화하는 빈도 막대 그래프 실습]
from matplotlib import pyplot as plt
import pandas as pd
X = pd.read_csv('http://www.innocoding.co.kr/python_5-3.csv', engine = 'python', header = None).iloc[:,0]
print(X.value_counts())
plt.bar(X.value_counts().index, X.value_counts())
plt.show()
: 하나의 열에 값만 있는 csv 파일 활용! 따라서 header = None 인자 설정! 그리고 iloc[:,0]을 이용하여 컬럼의 이름이 없으므로 0번째 열의 모든 행을 가져왔음.
: value_counts()는 series 가 가지는 값의 빈도수를 내림차순으로 출력하는 함수 => 결과는 인덱스가 값이고, 값이 빈도인 series
- 원 그래프 : pie 함수
: 원 그래프를 그리는데 사용하는 pie 함수로, 원의 크기를 나타내는 배열, 라벨, 각각의 원이 차지하는 비율 표시 방법(autopct)등을 입력으로 받는다.
- %0.f%% = 첫째자리까지 반올림
- %.1f%% = 소수 첫째자리까지 반올림
- %.2f%% = 소수 둘째자리까지 반올림
from matplotlib import pyplot as plt
plt.pie([8,6,10], labels = ['A','B','C'], autopct = '%.2f%%')
plt.show()
[단어 데이터들의 빈도가 원그래프로 표시 실습]
from matplotlib import pyplot as plt
import pandas as pd
X = pd.read_csv('http://www.innocoding.co.kr/python_5-3.csv',engine= 'python', header = None).iloc[:,0]
print(X.value_counts())
plt.pie(X.value_counts(),labels = X.value_counts().index, autopct= '%.1f%%')
plt.show()
- 히스토그램 : hist 함수
: hist() 함수, 1차원 배열, 막대의 개수(bins), 색상, 선 색상, 막대 사이 간격(rwidth)
: 선 색상은 none 받을 수 있고, 이 경우에는 선이 그려지지 않음
: bins에 정수를 입력시에 막대의 개수로 인식, 배열을 입력시 구간으로 인식 (보통 정수를 많이 씀)
: 분포 정도 파악 가능!
from matplotlib import pyplot as plt
import pandas as pd
X = np.random.random(size = 1000)
plt.hist(X, bins = 50)
plt.show()
[성인 남성 1000명의 신장 데이터를 토대로 히스토그램 실습]
from matplotlib import pyplot as plt
import pandas as pd
df = pd.read_csv('http://www.innocoding.co.kr/python_5-4.xlsx')
plt.hist(df['신장'],bins = 10, rwidth = 0.8, color = 'green', edgecolor = 'black')
plt.show()
그래프 옵션 설정하기
: 다양한 그래프 옵션 설정 가능 - 그림의 크기, 제목 설정, 범례 설정, 축 제목 설정, 축의 tick 편집 / figure, title, legend, xlabel, xticks
- 그림 객체 수정 옵션 관련 함수
: 그림의 크기는 figure 함수의 figsize 옵션을 설정함으로써 설정 가능
plt.figure(figsize=(15,10))
: 그림의 제목을 설정하는 함수는 title()
plt.title('Graph Title')
: 범례를 추가하는 함수는 legend(), 옵션으로는 loc 라는 위치 옵션 존재함! 단, legend 함수를 사용하기 위해서는 그래프를 그릴 시에 label 설정해줘야 함
plt.plot(X,Y, label = 'Label')
plt.legend(loc = 'lower right')
[그림 객체 수정 옵션 실습]
import numpy as np
from matplotlib import pyplot as plt
X = np.arange(1,5,0.2)
Y1 = X
Y2 = X * 2
Y3 = X ** 2
plt.figure(figsize = (5,5))
plt.plot(X,Y1,label='X')
plt.plot(X,Y2,label='2X')
plt.plot(X,Y3,label='X^2')
plt.title('X~Y1, Y2, Y3')
plt.legend(loc-'best')
plt.show()
: legend(loc='best') 는 그래프와 범례가 겹치지 않는 위치에 범례를 놓는 옵션!
- 축 옵션 설정 함수
: 축의 범위 설정 함수는 xlim(), ylim() 이며 각각 축의 최소값과 최대값을 튜플 형태로 입력
plt.xlim(0,10)
plt.ylim(-5,5)
: 축의 스케일을 설정하는 함수는 xscale(), yscale() 이며, 각각 linear (선형), log(로그), logit(로짓) 입력
plt.xscale('linear')
plt.yscale('log')
: 축 제목을 설정하는 함수로는 xlabel(), ylabel() 이 있음
: 축의 tick을 편집할 수 있는 함수로는 xticks(), yticks()가 있고, 이들은 위치값과 라벨을 입력으로 받는다. 각 점에 대한 위치는 가장 왼쪽 부터 0,1,2,,,으로 계산 됨
plt.xticks([0,1,2],['A','B,'C'])
[축 옵션 바꿔보기 실습]
from matplotlib import pyplot as plt
X = [1,2,3,4,5]
Y = [100,1000,10000,100000,100000]
plt.plot(X,Y)
plt.show()
plt.clf()
plt.plot(X,Y)
plt.xlabel('X')
plt.ylabel('Y')
plt.yscale('log')
plt.xticks(range(1,6),['A','B','C','D','E'])
plt.show()