이번에는 Matplotlib의 고급 옵션과 함께 pandas의 자료형인 series 와 dataframe의 내장 함수를 사용하여 그래프를 손쉽게 그리는 방법을 학습!
고급 그래프 그리기
: Matplotlib은 단순한 그래프뿐만 아니라, 박스 플롯, 열지도, 누적 영역 그래프 등 고급 그래프를 손 쉽게 그릴 수 있는 함수를 제공함!
- boxplot 함수
: 박스 플롯은 변수의 범위와 중앙값 등을 빠르게 확인하는 목적으로 사용 - 최소값, 1사분위수, 2사분위수, 3사분위수, 최대값, 이상치 확인 가능
: boxplot() 함수 사용, X축에 들어갈 배열을 입력, 1차원 배열의 경우에는 하나의 박스를 2차원 배열의 경우에는 열의 개수만큼 박스 생성
from matplotlib import pyplot as plt
X = [1,2,3,4,5,3,2,4,5]
plt.boxplot(X)
plt.show()
[남성과 여성의 신장 박스플롯 그리기]
import pandas as pd
from matplotlib import pyplot as plt
df = pd.read_csv('http://www.innocoding.co.kr/python_6-1.csv',engine='python')
plt.figure(figsize = (6,10))
plt.boxplot([df['남성'],df['여성']]
plt.title('남성과 여성의 신장 분포')
plt.xticks([1,2], ['남성','여성'])
plt.show()
: 박스 플롯 그래프의 생성 위치는 [1,2,3,,,,] 이다!
- 열 지도 : pcolor 함수
: matplotlib의 pcolor 함수는 열지도를 그려주는 함수로 2차원 배열 데이터를 입력!
: colorbar()함수는 열 지도를 그리는데 사용된 색상 정보를 바 형태로 보여줌
from matplotlib import pyplot as plt
data = [[1,2,1],[1.5,2.1,3.1]]
plt.pcolor(data)
plr.colorbar()
plt.show
[여름철 날씨 변수 간 상관계수 행렬 도식화 실습]
: 서울시 측정 여름철 날씨 변수간 상관관계 행렬 계산 하여 pcolor로 도식화
import pandas as pd
from matplotlib import pyplot as plt
df = pd.read_csv('http://www.innocoding.co.kr/python_6-2.csv',engine='python')
print(df.head())
plt.pcolor(df.corr())
plt.colorbar()
plt.xticks([0.5,1.5,2.5,3.5],['기온','강수량','풍속','습도'])
plt.yticks([0.5,1.5,2.5,3.5],['기온','강수량','풍속','습도'])
plt.show()
: .corr() 함수는 데이터프레임에 있는 컬럼 간의 상관계수 행렬을 구해주는 함수
- 누적 영역 그래프 : stackplot 함수
: 누적 영역 그래프는 전체에서 부분이 차지하는 부분을 도식화 하기 위한 그래프
: stackplot()으로, x축에 들어갈 배열과 y축에 들어갈 배열을 입력으로 받음
[지점의 월별 판매량 도식화 실습]
import pandas as pd
from matplotlib import pyplot as plt
df = pd.read_excel('http://www.innocoding.co.kr/python_6-3.xlsx')
plt.figure(figsize=(12,7))
plt.stackplot(
df['월'],df['지점1_판매량'], df['지점2_판매량'],df['지점3_판매량'],
labels = ['지점1','지점2','지점3']
)
plt.legend(loc = 'upper right')
plt.show()
고급 옵션 설정하기
: 그래프에 주석을 다는 text 함수, annotate 함수, 그리고 하나의 그래프를 여러 개의 그래프로 분할 하는 함수
- 그래프에 주석 달기 - text 함수
: 그래프를 그리다보면 그래프 상에 텍스트를 직접 써야하는 경우 = 데이터 수치 정확히 알기 어려워 데이터 라벨 부착
: text() 함수 사용, 텍스트가 부착될 x,y 좌표와 문자열, 크기를 순서대로 입력
[ 막대 그래프 데이터 라벨링 실습]
from matplotlib import pyplot as plt
plt.figure(figsize=(5,13))
plt.bar(['A','B','C'], height = [8,6,10])
plt.text(0 ,8 +0.2, '8', size = 13)
plt.text(1 ,6 +0.2, '6', size = 13)
plt.text(2, 10 +0.2, '10', size = 13)
plt.show()
- annotate 함수
: 그래프에 매우 중요한 수치가 있는 경우, 혹은 특정 이벤트 등을 강조하기 위해 그래프 상에 텍스트와 화살표 그림
: 텍스트가 부탁된 화살표를 그리는 annotate 함수!
: annotate () 함수는 텍스트, 화살표 끝 위치(xy), 화살표 시작 위치(xytext), 화살표 그림에 대한 속성 (arrowprops) 입력
: 화살표 시작 위치에 텍스트 부착, 화살표 그림에 대한 속성으로는 두께, 화살표 머리 크기, 색상이 있음!
from matplotlib import pyplot as plt
plt.annotate(
'여기를\n주목해주세요!'
xy = (0.3,0.5),
xytext = (0.6,0.7),
arrowprops = {'width' : 3, 'headwidth' : 5, 'color': 'red'}
)
plt.show()
[2019년 7월 최고 기온 강조 실습]
import pandas as pd
from matplotlib import pyplot as plt
df = pd.read_csv('',engine='python')
plt.figure(figsize=(30,15))
plt.plot(df['날짜'], df['기온'])
y = df['기온'].max()
x = df['기온'].idxmax()
plt.annotate(
'최고기온',
xy = (x,y),
xytext = (x+5.7, y-1.3),
fontsize = 30,
arrowprops = {'width' : 5, 'headwidth' : 25, 'headlength' : 25, 'color' :'red'}
)
plt.show()
: max()는 series 값 중에 최대값 반환 함수 , idxmax() 는 최대값이 있는 인덱스 반환 함수
- 서브 플롯 설정하기
: 그래프 크기 조절 figure 함수 사용시 그래프 객체 생성 가능
- fig = plt.figure(figsize = (10,5))
: 그래프 객체를 만든 후, 함수를 사용해서 그래프 그리면 그래프 객체에 그래프가 추가 됨!
: 그래프 객체에 add_subplot() 이라는 서브 플롯을 추가하는 함수 적용 가능 , 행의 개수, 열의 개수, 플록 인덱스를 입력!
: 서브 프롯 간의 간격 조정을 위해선 subplots_adjust()함수 사용! = 좌우 간격과 상하 간격을 입력!
from matplotlib import pyplot as plt
X = [1,2,3]
Y1 = [1,2,3]
Y2 = [2,4,6]
fig = plt.figure(figsize = (10,5))
subplot_1 = fig.add_subplot(2,1,1)
subplot_2 = fig.add_subplot(2,1,2)
subplot_1.plot(X,Y1)
subplot_2.plot(X,Y2)
plt.subplots_adjust(wspace=0.3,hspace = 0.3)
plt.show()
[제품의 분기별 평균 판매량 그래프 그리기]
: 판매량 차이가 매우 큰 두 제품에 대해서 분기별 평균 판매량 그래프
from matplotlib import pyplot as plt
import pandas as pd
df = pd.read_excel('')
fig = plt.figure(figzie = (10,5))
subplot_1 = fig.add_subplot(1,2,1)
subplot_2 = fig.add_subplot(1,2,2)
subplot_1.plot(df['분기'],df['제품1_판매량])
subplot_2.plot(df['분기'],df['제품2_판매량])
subplot_1.title.set_text('제품1의 분기별 판매량')
subplot_2.title.set_text('제품2의 분기별 판매량')
plt.subplots_adjust(wspace = 0.5, hspace = 0.0)
plt.show()
: .title.set_text('서브플롯 제목') = 서브 플롯의 제목을 따로 설정하기 위해선!~
Pandas에서 Matplotlib 모듈 직접 사용하기
: 다양한 그래프를 그리기 어렵고 고급 옵션 설정이 힘들다는 단점이 있지만, 간단한 그래프는 매우 간단하게 그릴 수 있음! DataFrame 객체에서 직접 matplotlib 주요 함수를 사용하는 방법
- plot.bar, plot.barh 함수
: x축에 들어갈 배열의 이름과 y축에 들어갈 배열의 이름을 입력!
: 각 배열의 이름은 dataframe 에 포함되어 있어야 함!!
: 그래프의 크기, 색상 등의 옵션은 함수 내에 키워드를 사용함으로써 설정 가능
from matplotlib import pyplot as plt
import pandas as pd
df = pd.DataFrame(
{
'X':['A', 'B', 'C', 'D', 'E'],
'Y':[100, 50, 120, 180, 160]
}
)
df.plot.bar("X", "Y")
plt.show()
- plot.pie 함수
: 원 그래프를 그릴 배열의 이름을 입력! 각 배열의 이름 데이터 프레임에 꼭 포함! 인덱스는 X축의 역할
: series의 경우, 특별한 설정 없이 값이 자동으로 그래프 표현 가능
import pandas as pd
from matplotlib import pyplot as plt
df = pd.DataFrame(
{
'질량': [0.330, 4.87 , 5.97],
'반지름': [2439.7, 6051.8, 6378.1]
},
index=['수성', '금성', '지구']
)
df.plot.pie(y='질량', figsize = (5, 5), legend = False, autopct = "%.1f")
plt.show()
- plot.box 함수
: 데이터 프레임에서 직접 사용! 데이터 프레임에 있는 컬럼들에 대해 자동으로 박스 플롯 생성하므로 배열을 입력 받지 X
import pandas as pd
from matplotlib import pyplot as plt
df = pd.DataFrame(
{
"X1":[1, 2, 3, 4, 5, 4, 3, 2, 1],
"X2":[3, 3, 4, 5, 4, 3, 2, 1, 2]
}
)
df.plot.box()
plt.show()
- plot.scatter 함수
: pyplot.scatter 함수를 데이터 프레임에서도 사용가능!
: 데이터 프레임에서 x,y 축에 들어갈 배열의 이름을 입력!
import pandas as pd
from matplotlib import pyplot as plt
df = pd.DataFrame(
{
"X":[1, 2, 3, 4, 5],
"Y":[2, 4, 6, 8, 10]
}
)
df.plot.scatter("X", "Y", color = "red")
plt.show()
'Data Analysis > Python' 카테고리의 다른 글
[Pandas] 데이터 기능 대체하기 (0) | 2022.05.14 |
---|---|
[Web Crawling] 웹 크롤링을 위한 파이썬의 Requests 모듈 (0) | 2022.05.08 |
[Matplotlib] Matplotlib을 이용한 그래프 그리기 (0) | 2022.04.02 |
[Pandas] 데이터 불러오기 & 확인하기 (0) | 2022.03.31 |
[Pandas] 데이터 인덱싱과 슬라이싱 (0) | 2022.03.31 |
댓글