데이터분석 기초4
<Matplotlib>
파이썬에서 데이터를 그래프나 차트로 시각화할 수 있는 라이브러리
그래프를 그리는데 2가지 방법을 쓸 수 있다.
1. state machine interface-> 자동화 스타일
import matplotlib.pyplot as plt
x=[1,2,3,4,5]
y=[1,2,3,4,5]
plt.plot(x,y) #x와 y를 가지고 그래프를 그림
plt.title("First Plot") #그래프의 제목
plt.xlabel("x") #그래프의 x축의 이름
plt.ylabel("y") #그래프의 y축의 이름
2. object oriented interface -> 객체기반 스타일
import matplotlib.pyplot as plt
import numpy as np
x=[1,2,3,4,5]
y=[1,2,3,4,5]
fig, ax= plt.subplots() #흰 도화지 fig에 ax그래프를 만들 것
ax.plot(x,y) #x와 y를 가지고 ax그래프를 생성
ax.set_title("First Plot") #그래프의 제목
ax.set_xlabel("x") #그래프의 x축의 이름
ax.set_ylabel("y") #그래프의 y축의 이름
fig.set_dip(300) #인치당 도트의 갯수를 설정하여 해상도를 조절할 수 있음
fig.savefig("first_plot.png") #저장하기
#->1번 방법을 사용하여 만든 그래프와 동일한 결과
#여러개의 그래프를 그리기
x=np.linspace(0,np.pi*4,100) #x는 0부터 4파이를 균등하게 100조각 낸 리스트
fig,axes=plt.subplots(2,1) #하나의 도화지에 위, 아래 세로방향으로 2가지 그래프를 생성
axes[0].plot(x,np.sin(x)) #윗 그래프-> 사인
axes[1].plot(x, np.cos(x)) #아랫 그래프-> 코사인
1. Line plot
import matplotlib.pyplot as plt
import numpy as np
fig, ax= plt. subplots()
x=np.arange(15) #0~14 배열 생성
y=x**2
ax.plot(
x, y,
linestyle=":", #라인 스타일
marker="*", #그래프 위에 (x,y)점 스타일
color="#524FA1" #컬러
)
<Line style>
-x와 x를 가지고 그래프를 만들어 평행이동 시키면서 라인 스타일을 비교
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(10) #0~9 배열 생성
fig, ax= plt. subplots()
ax.plot(x,x,linestyle="-") #solid 스타일
ax.plot(x, x+2, linestyle="--") #dashed 스타일
ax.plot(x,x+4,linestyle="-.") #dashdot 스타일
ax.plot(x,x+6,linestyle=":") #dotted 스타일
plt.show()
<Color>
여러가지 방법으로 그래프의 색을 지정할 수 있다.
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(10) #0~9 배열 생성
fig, ax= plt. subplots() #그래프 생성
ax.plot(x, x, color="r") #빨강:r, 초록:g, 파랑:b 등등 단축어를 사용하여 색 지정
ax.plot(x, x+2, color="green") #문자열로 색 지정
ax.plot(x, x+4, color='0.5') #0은 검은색 1은 흰색을 나타내며 0과 1사이의 숫자를 문자열로 입력하여 색 지정
ax.plot(x, x+6, color="#524FA1") #16진수로 색 지정
<Marker>
여러가지의 마커 스타일 존재
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(10)
fig, ax= plt.subplots()
ax.plot(x,x,marker=".") #점 표시
ax.plot(x,x+2,marker="o") #원 표시
ax.plot(x,x+4, marker="v") #역삼각형 표시
ax.plot(x, x+6, marker="s") #직사각형(square) 표시
ax.plot(x,x+8, marker="*") #* 표시
<축 경계 조정>
.set_xlim(): x축의 경계 조정
.set_ylim(): y축의 경계 조정
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,10,1000) #0부터 10까지를 균일하게 1000조각으로 잘라 배열 생성
fig, ax= plt.subplots() #그래프 생성
ax.plot(x, np.sin(x)) #사인 그래프
ax.set_xlim(-2,12) # -2 ~ 12를 x축의 범위로 설정
ax.set_ylim(-1.5,1.5) #-1.5 ~ 1.5를 y축의 범위로 설정
<범례: legend>
범례란, 그래프를 요약하여 나타낸 것으로 범례도 여러가지 설정을 통하여 조작할 수 있다.
.legend(): 범례를 설정하는 함수
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(10) #0부터 9까지의 배열 생성
fig, ax= plt.subplots()
ax.plot(x, x, label='y=x') #y=x그래프 생성
ax.plot(x,x**2, label="y=x^2") #y=x^2그래프 생성
ax.set_xlabel("x") #그래프의 x축 이름을 x로 지정
ax.set_ylabel("y") #그래프의 y축 이름을 y로 지정
ax.legend(
loc='upper right', #위치를 loc를 아용하여 나타냄/ upper, lower, left, right
shadow=True, # 그림자 설정
fancybox=True, #상자의 모서리를 둥글게
borderpad=2 #크기 지정
)
2. Scatter : 산점도 그래프
점의 크키, 모양, 색(안쪽, 바깥쪽)등 설정 가능
1) .plot()을 이용하여 산점도 그래프 그리기
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(10) #0부터 9까지의 배열 생성
fig, ax=plt.subplots()
ax.plot(
x, x**2, "o",
markersize=13, #마커의 사이즈 지정/ 숫자가 클수록 크기가 커짐
markerfacecolor="white", #마커 안쪽의 색
markeredgecolor="blue" #마커 테두리의 색
)
ax.plot(
x, x*8, "*",
markersize=10, #마커의 사이즈 지정/ 숫자가 클수록 크기가 커짐
markerfacecolor="red", #마커 안쪽의 색
markeredgecolor="blue" #마커 테두리의 색
)
2) .scatter()을 이용하여 산점도 그래프 그리기
import matplotlib.pyplot as plt
import numpy as np
fig,ax=plt.subplots()
x=np.random.randn(50) #표준정규분포를 따르는 50개의 난수 생성
y=np.random.randn(50) #표준정규분포를 따르는 50개의 난수 생성
colors=np.random.randn(50) #표준정규분포를 따르는 50개의 난수 생성햐여 각각 다른 색상을 적용
sizes=500*np.pi*np.random.randn(50)**2 #각각 다른 50개의 사이즈 적용
ax.scatter(
x,y,
c=colors, #색상
s=sizes, #사이즈
alpha=0.3 #투명도
)
3. Bar plot: 막대그래프
.bar() : 막대그래프 생성하는 함수
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(10) #0부터 9까지의 배열 생성
fig, ax= plt.subplots(figsize=(12,4)) #그래프의 사이즈를 정하여 그래프 생성
ax.bar(x, x**2)
누적 막대그래프
import matplotlib.pyplot as plt
import numpy as np
x=np.random.rand(3) #0부터 1 사이에서 균일한 확률 분포로 3개의 실수 난수를 생성
y=np.random.rand(3) #0부터 1 사이에서 균일한 확률 분포로 3개의 실수 난수를 생성
z=np.random.rand(3) #0부터 1 사이에서 균일한 확률 분포로 3개의 실수 난수를 생성
data=[x,y,z]
fig, ax=plt.subplots()
x_ax=np.arange(3) #[0,1,2]
for i in x_ax:
ax.bar(x_ax, data[i],
bottom=np.sum(data[:i], axis=0)) #누적막대그래프를 만들기 위하여 누적합으로 바닥을 지정
ax.set_xticks(x_ax) #0,1,2를 xtick으로 잡음
ax.set_xticklabels(["A","B","C"]) #0,1,2를 A,B,C,로 이름 변경
4. Histogram: 히스토그램
.hist(): 히스토그램을 생성하는 함수
import matplotlib.pyplot as plt
import numpy as np
fig, ax=plt.subplots()
data=np.random.randn(1000) #표준정규분포를 따르는 1000개의 난수를 균일한 확률로 뽑아 배열 생성
ax.hist(data, bins=50) #막대그래프 50개로 이루어진 히스토그램 생성