파이썬 데이터 시각화, plotly 다중 그래프 그리기

2019. 10. 18. 10:40

plotly를 이용하면 d3기반의 대화형 시각화 이미지를 쉽게 만들 수 있다. 다른 데이터 시각화 패키지와는 문법이 조금 달라 사용하기 어려웠지만, 최근에 matplotlib과 유사하게 문법이 변경된 듯 하다. 앞으로 버전업이 되면서 더 사용하기 쉬워지지 않을까 예상해본다.

오늘은 파이썬 데이터 시각화 패키지 plotly를 이용해서 다중 그래프를 그리는 방법에 대해서 알아보도록 하겠다.


plotly_그래프



하나의 이미지에 여러 개의 그래프를 그리는 것을 다중 그래프라고 표현해봤다. R의 ggplot패키지에서는 facetgrid라고 하고, maplotlib이나 plotly에서는 subplot이라고 표현한다.


plotly 패키지에서 subplot을 그리는 방법을 정리해보면 아래와 간다. 문법이 굉장히 직관적이어서 사실 별도의 설명이 필요없을 정도이긴 하다.



1. make_subplots 함수를 이용해서 레이아웃을 잡아준다.


다중 그래프를 그리기 위해서는 make_subplots 함수를 이용해야 한다. make_subplots함수에서는 몇 개의 그래프를 rows와 cols 입력인자로 지정한다. 어떤 그래프를 그릴지도 이 단계에서 지정하는 것이 좀 특이하다. 아래와 같은 입력인자를 사용할 수 있다.



  - rows: 행의 갯수 (ex) 2)

  - cols: 열의 갯수 (ex) 3)

  - shared_xaxes: x축을 공유할지 여부 (True, False)

  - shared_yaxes: y축을 공유할지 여부 (True, False)

  - start_cell: 시작위치 정하기 (ex) "top-left")

  - print_grid: 그리드 출력여부 (True, False)

  - horizontal_spacing: 그래프간 가로 간격

  - vertical_spacing: 그래프간 가로 간격

  - subplot_titles: 서브 플랏 타이틀

  - column_widths: 가로 넓이

  - row_heights: 세로 넓이

  - specs: 서브 플롯별 옵션 구성시 사용

  - insets: 서브 플롯별 그리드 레이아웃 구성

  - column_titles: 열 제목

  - row_titles: 행 베목

  - x_title: x축 이름

  - y_title: y축 이름



2. add_trace함수를 이용해서 정해진 레이아웃에 그래프를 그린다.


위에 row와 col 입력인자로 위치를 지정해서 그래프를 그려넣으면 된다. rows는 위에서부터 아래로 0부터 숫자를 메기면 되고, col은 왼쪽에서 오른쪽으로 0부터 숫자를 붙이면 된다.



부동산 실거래 데이터를 기준으로 아래와 같이 거래건수와 평균가격 그래프를 그려보았다. 데이터는 미리 수집하였다. 부동산 실거래가 데이터를 수집하는 방법이 궁금하다면 아래 포스팅을 참조해보자.
( 참조: 공공데이터 활용하여 전월세 실거래가 가져오기 )


9월_아파트_매매_실거래가



쥬피터 노트북을 이용해서 그리면, 마우스 커서를 가져대면 해당 데이터의 값을 보여준다. 위의 그래프는 화면을 캡쳐한 것이라 이 부분은 직접 그려서 확인해보기를 바란다.


실제 코드는 아래와 같다.


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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# coding = utf-8
 
import plotly
import data_manage
from plotly.graph_objs import Scatter, Line, Layout
 
import importlib
importlib.reload(data_manage)
 
import json
 
from plotly.subplots import make_subplots
import plotly.graph_objects as go
 
import pandas as pd
 
df = data_manage.load_db()
 
df.head()
df.dtypes
 
df["deal_ymd"= pd.to_datetime(df["deal_ymd"])
df.head()
 
df_grb_price = df.groupby("deal_ymd")["price"].mean()
df_grb_price = pd.DataFrame(df_grb_price, columns={"price"}).reset_index(drop=False)
 
df_grb = df.groupby("deal_ymd").size()
df_grb = pd.DataFrame(df_grb).reset_index(drop=False)
df_grb.columns = ["deal_ymd""cnt"]
 
fig = make_subplots(
    rows=2, cols=1, shared_xaxes=True, vertical_spacing=0.02,
    row_heights = [0.70.3],
)
 
fig.add_trace(go.Line(x=df_grb_price["deal_ymd"], y=df_grb_price["price"], name="9월 평균 거래금액 "), row=1, col=1)
fig.add_trace(go.Bar(x=df_grb["deal_ymd"], y=df_grb["cnt"], name="9월 거래건수 "), row=2, col=1)
 
fig.update_layout(height=326*2, width=280*3,
                  title_text="아파트 9월 매매 현황")
 
fig.show()
 
cs



plotly패키지를 이용해서 서브 플랏을 그리는 방법에 대해서, 더 많이 알고 싶다면 아래 공식 홈페이지를 참조하기 바란다.
( 참조: plotly 서브 플랏 그리는 법, 공식 홈페이지에서 확인하기 )



오늘은 이렇게 파이썬 데이터 시각화, plotly 다중 그래프 그리기에 대해서 알아보았다. 예전에는 문법이 조금 난해하여 사용하기 어려웠다. 하지만, 버전업이 되면서 사용하기에 굉장히 편리해졌다. 적은 노력의 고품질의 대화형 그래프를 그릴 수 있다는 것은 즐거운 일이다.


몇 가지 팁이나 방법을 알면 파이썬을 더 효율적으로 코딩할 수 있는 방법들이 있다. 자세한 내용이 궁금하다면, 아래 링크를 참조해보자.
( 참조: 파이썬 효율적인 코딩팁과 방법들 )


댓글()