일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 통계
- matplotlib
- r
- scikit learn
- 머신러닝
- 시각화
- ML
- 태블로
- 데이터 분석
- 이것이 코딩테스트다
- ADsP
- 데이터분석
- 자격증
- 이코테
- Google ML Bootcamp
- SQL
- 데이터분석준전문가
- IRIS
- 회귀분석
- pytorch
- Deep Learning Specialization
- Python
- pandas
- SQLD
- 딥러닝
- 데이터 전처리
- 파이썬
- sklearn
- 코딩테스트
- tableau
- Today
- Total
함께하는 데이터 분석
[Python] Matplotlib 산점도 그래프 그리기 본문
오늘은 Maplotlib을 이용하여
산점도 그래프를 그려보겠습니다.
라이브러리 불러오기
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rc('font', family = 'AppleGothic') # mac
# plt.rc('font', family = 'Malgun Gothic') # window
plt.rc('font', size = 12)
plt.rc('axes', unicode_minus = False) # -표시 오류 잡아줌
데이터 불러오기
import seaborn as sns
iris = sns.load_dataset('iris')
이번에는 seaborn에 내장되어있는 데이터인
iris데이터를 이용하여 산점도 그래프를 그려보겠습니다.
데이터 확인하기
iris.shape
>>> (150, 5)
iris 데이터는 150개의 행, 5개의 열이 존재하는 것을 확인할 수 있습니다.
iris.info()
species열을 제외한 나머지 열의 데이터는 수치형 변수인 것을 확인할 수 있고
species열은 범주형 데이터인 것을 알 수 있습니다.
iris.describe()
수치형 변수의 데이터의 사분위수와 평균 등등
값을 알아봤습니다.
species열은 범주형 데이터라 표시되지 않죠.
iris.describe(include = 'object')
describe에 include = 'object'를 넣어주시면
범주형 데이터도 요약해서 결과를 도출해줍니다.
3개의 unique 한 값이 존재하고
setosa가 제일 많고 그 빈도수는 50이라는 것을 알 수 있습니다.
iris.head()
iris.tail()
산점도 그래프 그리기
plt.figure(figsize = (10, 7))
plt.scatter(x = iris['sepal_length'], y = iris['sepal_width'])
plt.show()
plt.scatter를 이용하여
x축에 sepal_length, y축에 sepal_width를 넣고
산점도 그래프를 그려줬습니다.
150개의 데이터가 있어서 그래프가 보시다시피 상당히 난잡해서
데이터의 개수를 50개만 추출하여 실행해보겠습니다.
iris1 = iris[1:51]
iris1.shape
>>> (50, 5)
plt.figure(figsize = (10, 7))
plt.scatter(x = iris1['sepal_length'], y = iris1['sepal_width'])
plt.show()
데이터의 개수가 줄은 것을 확인할 수 있죠.
이제 제목, x축, y축에 이름을 달아주겠습니다.
plt.figure(figsize = (10, 7))
plt.scatter(x = iris1['sepal_length'], y = iris1['sepal_width'])
plt.title('sepal length와 width의 산점도')
plt.xlabel('50개의 sepal_length', loc = 'right')
plt.ylabel('50개의 sepal_width', loc = 'top')
plt.show()
점 크기 변경
np.random.seed(42)
sizes = np.random.rand(50) * 250
sizes
>>> array([ 93.63502971, 237.6785766 , 182.99848545, 149.66462105,
39.00466011, 38.99863008, 14.52090304, 216.54403644,
150.27875294, 177.01814445, 5.14612357, 242.47746304,
208.1106602 , 53.08477767, 45.4562418 , 45.85112746,
76.06056074, 131.18910791, 107.98625466, 72.80728505,
152.96322368, 34.87346516, 73.03616213, 91.59046082,
114.01749605, 196.29399035, 49.91844554, 128.5586096 ,
148.10364222, 11.61260318, 151.88621298, 42.63103092,
16.26289825, 237.22138431, 241.40800827, 202.09933703,
76.15344229, 24.4180285 , 171.05825663, 110.03812343,
30.50955871, 123.79422753, 8.59713028, 227.33010052,
64.6949954 , 165.63057109, 77.92776902, 130.01700529,
136.67756984, 46.21361388])
np.random.seed()를 설정하여 같은 수가 계속 뽑히게 해 주었고
이후 np.random.rand()를 이용하여 난수를 뽑아줬습니다.
np.random.rand(50)는 0~1 사이의 값을 갖는 균일 분포에서
50개의 난수를 뽑아줍니다.
다음 0~1 사이의 값이 작아 250을 곱해줬고
sizes에 할당해줬습니다.
plt.figure(figsize = (10, 7))
plt.scatter(x = iris1['sepal_length'], y = iris1['sepal_width'], s = sizes)
plt.title('sepal length와 width의 산점도')
plt.xlabel('50개의 sepal_length', loc = 'right')
plt.ylabel('50개의 sepal_width', loc = 'top')
plt.show()
plt.scatter의 s에 아까 할당해준 sizes를 넣어주면 됩니다.
그래프를 보시면 점의 크기가 랜덤 하게 커진 것을 확인할 수 있죠.
이번에는 색깔을 변경해보겠습니다.
점 색깔 변경
colors = iris1['sepal_width']
plt.figure(figsize = (10, 7))
plt.scatter(x = iris1['sepal_length'], y = iris1['sepal_width'] \
, s = sizes, c = colors)
plt.title('sepal length와 width의 산점도')
plt.xlabel('50개의 sepal_length', loc = 'right')
plt.ylabel('50개의 sepal_width', loc = 'top')
plt.show()
iris 중 y축 데이터인 sepal_width를 colors에 할당해줬습니다.
그리고 plt.scatter에 c에 할당했습니다.
그래프를 보시면 y의 크기가 같은 라인은
색깔이 똑같은 것을 확인할 수 있죠.
이번에는 다른 색상을 넣어줘 볼까요?
plt.figure(figsize = (10, 7))
plt.scatter(x = iris1['sepal_length'], y = iris1['sepal_width'] \
, s = sizes,c = colors, cmap = 'magma')
plt.title('sepal length와 width의 산점도')
plt.xlabel('50개의 sepal_length', loc = 'right')
plt.ylabel('50개의 sepal_width', loc = 'top')
plt.show()
cmap에 magma를 넣어줘서 위와 같이 색깔이 변경된 것을 알 수 있습니다.
magma 뿐만 아니라 viridis, plasma, inferno, cividis 등등
다른 것들을 넣을 수도 있습니다.
하지만 color을 설정하지 않고 cmap을 설정하면
효과가 없다는 것을 알아두시기 바랍니다.
투명도 설정
plt.figure(figsize = (10, 7))
plt.scatter(x = iris1['sepal_length'], y = iris1['sepal_width'] \
, s = sizes, c = colors, cmap = 'magma', alpha = 0.7)
plt.title('sepal length와 width의 산점도')
plt.xlabel('50개의 sepal_length', loc = 'right')
plt.ylabel('50개의 sepal_width', loc = 'top')
plt.show()
앞서 봤던 선 그래프에서와 똑같이 alpha를 이용하여
투명도를 설정해줄 수 있습니다.
점이 같은 지점에 중복하여 찍혀져 있을 수 있으므로
투명도를 설정해주는 것은 산점도에서 유의미한 결과를 얻을 수 있습니다.
Colorbar 설정
plt.figure(figsize = (10, 7))
plt.scatter(x = iris1['sepal_length'], y = iris1['sepal_width'] \
, s = sizes, c = colors, cmap = 'magma', alpha = 0.7)
plt.colorbar()
plt.title('sepal length와 width의 산점도')
plt.xlabel('50개의 sepal_length', loc = 'right')
plt.ylabel('50개의 sepal_width', loc = 'top')
plt.show()
plt.colorbar()를 이용하여 오른쪽과 같이 설정해줄 수 있습니다.
이때 기준은 c에 넣어줬던 데이터입니다.
저는 iris['sepal_width'] 즉, y축 데이터를 넣어줬죠.
이번에는 colorbar에 이름을 넣어주겠습니다.
plt.figure(figsize = (10, 7))
plt.scatter(x = iris1['sepal_length'], y = iris1['sepal_width'] \
, s = sizes, c = colors, cmap = 'magma', alpha = 0.7)
plt.colorbar(label = 'sepal_width')
plt.title('sepal length와 width의 산점도')
plt.xlabel('50개의 sepal_length', loc = 'right')
plt.ylabel('50개의 sepal_width', loc = 'top')
plt.show()
label이 달아진 것을 확인할 수 있습니다.
이번에는 사이즈를 조정해볼까요?
plt.figure(figsize = (10, 7))
plt.scatter(x = iris1['sepal_length'], y = iris1['sepal_width'] \
, s = sizes, c = colors, cmap = 'magma', alpha = 0.7)
plt.colorbar(label = 'sepal_width', shrink = 0.5)
plt.title('sepal length와 width의 산점도')
plt.xlabel('50개의 sepal_length', loc = 'right')
plt.ylabel('50개의 sepal_width', loc = 'top')
plt.show()
plt.colorbar의 shrink인자에 0.5를 넣어서
크기가 반토막난 것을 보실 수 있습니다.
이번에는 colorbar를 수평으로 바꿔주겠습니다.
plt.figure(figsize = (10, 7))
plt.scatter(x = iris1['sepal_length'], y = iris1['sepal_width'] \
, s = sizes, c = colors, cmap = 'magma', alpha = 0.7)
plt.colorbar(label = 'sepal_width', orientation = 'horizontal', shrink = 0.5)
plt.title('sepal length와 width의 산점도')
plt.xlabel('50개의 sepal_length', loc = 'right')
plt.ylabel('50개의 sepal_width', loc = 'top')
plt.show()
plt.colobar의 orientation에 horizontal
즉, 수평으로 지정하면 위와 같이 colorbar가 아래로 내려옵니다.
산점도 그래프 그리기는 여기서 마무리하겠습니다!
'데이터분석 공부 > Python' 카테고리의 다른 글
[Python] Matplotlib 누적 막대그래프 (0) | 2022.04.05 |
---|---|
[Python] Matplotlib 막대그래프 그리기 (2) | 2022.04.04 |
[Python] Matplotlib 그래프에 텍스트 삽입 (0) | 2022.03.30 |
[Python] Matplotlib 평면내 여러 개의 선 그래프 그리기 (0) | 2022.03.29 |
[Python] Matplotlib 선 그래프와 배경 꾸미기 (0) | 2022.03.28 |