본문 바로가기
Python/데이터 시각화

matplotlib 산점도 그리기

by 찐남 2022. 2. 27.

이번 포스팅에서는

Matplotlib 라이브러리를 활용해서

산점도(scatterplot)를 그려 볼게요.

 

 

앞선 포스팅에서와 마찬가지로

기본적인 환경 세팅을 하겠습니다.

① matplotlib 라이브러리 사용 정의

② 그래프에서 환경설정이 가능하도록 폰트 설정

③ 한글 사용이 (-) 부호가 깨지는 현상 방지

 

import matplotlib.pyplot as plt   # matplotlib 라이브러리 load

## 한글 사용 가능하도독 폰트 설정
import matplotlib
matplotlib.rcParams['font.family'] = 'Malgun Gothic'  # os: window 
matplotlib.rcParams['axes.unicode_minus'] = False  # 한글 폰트 사용 시 (-) 부호 깨짐 현상 해결

이렇게 설정하면,

그래프에 한글과 (-) 부호 사용에 대한 걱정이 없어요.

 

실습에 사용할 데이터는

iris 붓꽃 데이터입니다.

iris.csv
0.00MB

 

 

기본 그래프(.scatter())

 

## iris data 가져오기
irisData = pd.read_csv("C:/iris.csv")

## 산점도 그리기
plt.scatter(irisData['SepalLength'], irisData['SepalWidth'])

 

x, y축에 대한 설명을 추가할게요.

plt.scatter(irisData['SepalLength'], irisData['SepalWidth']) # 기본 산점도 그래프 
plt.xlabel('SepalLength') # x축 설명 추가
plt.ylabel('SepalWidth') # y축 설명 추가

 

다음은 붓꽃 종류별로

점 크기를 다르게 표현해 볼게요.

그러려면, 붓꽃 종류별로

숫자를 먼저 세팅해 주어야 합니다.

그룹(붓꽃 종류) 별 점 크기 조정

## 산점도의 점 크기 변경을 위한 붓꽃 종류별 숫자 부여
import numpy as np # numpy 라이브러리 로딩
irisData['species_grp'] = np.where(irisData['Species'] == "setosa", 10,
                                   np.where(irisData['Species'] == "versicolor", 30, 100))

plt.scatter(irisData['SepalLength'], irisData['SepalWidth'], s = irisData['species_grp']
plt.xlabel('SepalLength')
plt.ylabel('SepalWidth')

 

이번에는 점의 색상도 변경해 볼게요.

 

산점도 점 색상 변경하기

## 산점도의 점 색상 변경하기 1
plt.scatter(irisData['SepalLength'], irisData['SepalWidth'], 
            s = irisData['species_grp'],
            c = irisData['species_grp']
plt.xlabel('SepalLength')
plt.ylabel('SepalWidth')

## 산점도의 점 색상 변경하기 2 - cmap 활용 
plt.scatter(irisData['SepalLength'], irisData['SepalWidth'], 
            s = irisData['species_grp']*100,
            c = irisData['species_grp'],
            cmap = 'plasma'
plt.xlabel('SepalLength')
plt.ylabel('SepalWidth')

 

위에서 사용한 cmap은

일종의 그라데이션이라고 보시면 됩니다.

자세한 옵션은 아래를 참고하세요.

<출처: matplotlib 홈페이지>

 

 

산점도에 투명도를 적용할 수도 있어요.

 

투명도 적용

## 산점도 투명도 적용
plt.scatter(irisData['SepalLength'], irisData['SepalWidth'], 
            s = irisData['species_grp']*100,
            c = irisData['species_grp'],
            cmap = 'plasma',
            alpha = 0.4
plt.xlabel('SepalLength')
plt.ylabel('SepalWidth')

 

이제 마지막으로

범례 형식의 막대를 추가해 볼게요.

 

범례 형식의 막대 추가

## 범례 형식의 색상 막대 추가
plt.scatter(irisData['SepalLength'], irisData['SepalWidth'], 
            s = irisData['species_grp'],
            c = irisData['species_grp'],
            cmap = 'plasma',
            alpha = 0.4) 
plt.xlabel('SepalLength')
plt.ylabel('SepalWidth')
plt.colorbar()

## 범례 형식의 색상 막대에 대한 옵션 및 라벨 추가 
plt.scatter(irisData['SepalLength'], irisData['SepalWidth'], 
            s = irisData['species_grp'],
            c = irisData['species_grp'],
            cmap = 'plasma',
            alpha = 0.4) 
plt.xlabel('SepalLength')
plt.ylabel('SepalWidth')
plt.colorbar(ticks = [20,60,100], label = '붓꽃 종류')

## 범례 형식의 색상 막대 길이 조정
plt.scatter(irisData['SepalLength'], irisData['SepalWidth'], 
            s = irisData['species_grp'],
            c = irisData['species_grp'],
            cmap = 'plasma',
            alpha = 0.4) 
plt.xlabel('SepalLength')
plt.ylabel('SepalWidth')
plt.colorbar(ticks = [20,60,100], label = '붓꽃 종류', shrink = 0.5)

## 범례 형식의 색상 막대 위치 조정
plt.figure(figsize = (10,7))  
plt.scatter(irisData['SepalLength'], irisData['SepalWidth'], 
            s = irisData['species_grp'],
            c = irisData['species_grp'],
            cmap = 'plasma',
            alpha = 0.4) 
plt.xlabel('SepalLength')
plt.ylabel('SepalWidth')
plt.colorbar(ticks = [20,60,100], label = '붓꽃 종류', shrink = 1.0, orientation = 'horizontal')

 

 

반응형

댓글