안녕하세요~ 꽁냥이에요. 오늘은 버블 차트에 대해서 알아보려고 하는데요. 버블 차트는 3차원 데이터를 2차원의 형태로 한눈에 볼 수 있는 차트입니다. 또한 색상 정보를 이용하면 4차원 데이터도 2차원 형태로 표현할 수 있습니다.
이번 포스팅에서는 Matplotlib을 이용하여 버블 차트를 그려보는 방법에 대해서 알아보겠습니다. 그럼 시작해볼까요?
1. 데이터 불러오기
먼저 이번 포스팅에서 사용할 데이터를 다운받아주세요~ 해당 데이터는 나라별로 매년 GDP와 인구수를 나타낸 것으로써 Kaggle에 의하면 교육용으로 만들어진 가짜 데이터(Mock Data)라고 하네요.
먼저 필요한 모듈을 임포트하고 데이터를 불러옵니다.
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv('./gapminder.csv')
2. 버블 차트(Bubble Chart) 그리기
버블 차트는 Matplotlib에서 scatter 함수를 사용하여 그릴 수 있습니다. scatter 함수는 산포도를 그릴 때 사용하는데요. 이에 대한 설명은 아래에 포스팅해놓았으니 참고하세요~
[산점도(Scatter Plot)] 1. Matplotlib을 이용하여 산점도 그리기
[산점도(Scatter Plot)] 2. Matplotlib을 이용하여 산점도 멋지게 만들어보기
아래 코드를 살펴보겠습니다. 해당 코드는 'Python Graph Gallery' 를 많이 참고하였습니다.
target_year = 1962
data = data.loc[data['year'] == target_year]
data['continent']=pd.Categorical(data['continent'])
fig = plt.figure(figsize=(8,8))
fig.set_facecolor('white')
plt.scatter(
x = data['lifeExp'],
y = data['gdpPerCap'],
s=data['population']/100000,
c=data['continent'].cat.codes,
cmap="rainbow",
alpha=0.6,
edgecolors="white",
linewidth=2);
plt.yscale('log')
plt.xlabel("Life Expectancy")
plt.ylabel("GDP per Capita")
plt.title(f"Year {target_year}")
plt.grid(True, which='major', linestyle='--', linewidth=0.5)
plt.show()
line 1~3
꽁냥이는 1962년에 대한 데이터를 버블 차트로 표현해보겠습니다. 이때 대륙을 범주형 데이터로 변환했습니다(line 3). 나중에 범주를 숫자로 변환시키기 위함입니다.
line 8~16
x축에 기대 수명, y축에 GDP로 설정하고 마커의 크기는 인구수로 설정했습니다. 그리고 컬러는 대륙별로 다르게 하려고 합니다(line 9~12). 이때 대륙을 나타내는 칼럼은 범주형으로 설정되어있는데 이를 숫자형으로 변경해야 정상적으로 컬러를 나타낼 수 있습니다(line 12). 마커의 색상은 cmap 인자를 통해 결정할 수 있습니다. cmap 인자에는 Matplotlib에서 미리 정해둔 컬러 맵(cmap)을 사용할 수 있어요(물론 사용자가 원하는 컬러 맵을 사용할 수도 있지만 여기에서는 생략하겠습니다). Matplotlib에서 선택할 수 있는 컬러맵은 여기에서 확인해보세요. 'rainbow'로 설정했습니다(line 13).
line 18
GDP의 경우 분포가 한쪽으로 굉장히 치우쳐져 있어서 y축을 그대로 사용하지 않고 log scale을 적용하여 나타내었습니다.
line 22
버블 차트에는 그리드를 넣어주어 중심점이 어디인 지를 알 수 있도록 해주면 좋습니다. 꽁냥이는 그리드를 Major 눈금에만 사용하도록 설정하였습니다.
위 코드를 실행해보세요
코드를 실행하면 버블 차트가 예쁘게 잘 그려진 것을 알 수 있습니다.
이번 포스팅에서는 버블 차트를 그리는 기본적인 방법을 알아보았습니다. 다음 포스팅에서는 시간에 따라서 움직이는 버블 차트를 그리는 방법에 대해서 포스팅하겠습니다. 지금까지 꽁냥이의 글 읽어주셔서 감사합니다.
참고자료
https://www.python-graph-gallery.com/341-python-gapminder-animation
'데이터 분석 > 시각화' 카테고리의 다른 글
Plotly를 이용하여 모션 버블 차트 만들기 (808) | 2021.10.28 |
---|---|
Matplotlib 이미지 파일 읽기/저장하기 (612) | 2021.08.16 |
Matplotlib을 이용하여 바 차트(Bar Chart)에 선 그래프 추가하기. (857) | 2021.08.05 |
Matplotlib 산포도에 히스토그램 추가하기 (817) | 2021.07.16 |
Matplotlib 서로 다른 y축 적용하기 (1044) | 2021.07.13 |
댓글