[파이썬] bokeh 그래프 내부의 상호작용 및 트랜지션

Bokeh은 파이썬을 사용하여 대화형 시각화를 만들 수 있는 강력한 도구입니다. Bokeh 그래프는 사용자와의 상호작용 및 트랜지션을 통해 시각적인 요소를 더욱 흥미롭게 만들 수 있습니다. 이 글에서는 Bokeh을 사용하여 그래프 내부의 상호작용과 트랜지션을 구현하는 방법에 대해 알아보겠습니다.

1. 상호작용을 위한 기본 설정

첫째로, Bokeh을 사용하여 그래프 내부의 상호작용을 구현하기 위해 필요한 기본 설정을 해야합니다. 아래 예제 코드에서는 상호작용을 위해 HoverTool을 사용하겠습니다.

from bokeh.plotting import figure, output_file, show
from bokeh.models import HoverTool

# 결과를 파일로 출력
output_file("interactive_plot.html")

# 그래프의 도구를 생성
hover_tool = HoverTool(tooltips=[("x", "@x"), ("y", "@y")])

# 그래프 생성
p = figure(title="상호작용 그래프", tools=[hover_tool])

# 그래프 내용 추가
p.circle([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], size=20)

# 그래프 보여주기
show(p)

위 코드에서 HoverTool은 그래프의 각 포인트에 마우스를 올렸을 때 나타날 정보를 설정하는 도구입니다. tooltips 매개변수를 사용하여 표시할 정보를 설정할 수 있습니다.

2. 그래프 내부의 트랜지션

둘째로, Bokeh을 사용하여 그래프 내부의 트랜지션을 구현하는 방법에 대해 알아보겠습니다. 아래 예제 코드에서는 그래프의 포인트 크기를 시간에 따라 변화시키는 트랜지션을 구현하였습니다.

import numpy as np
from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource
from bokeh.layouts import layout
from bokeh.models import CustomJS, Slider

# 결과를 파일로 출력
output_file("transitions.html")

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.sin(x)

# ColumnDataSource 생성
source = ColumnDataSource(data=dict(x=x, y=y, size=np.ones(len(x))))

# 그래프 생성
p = figure(title="트랜지션 그래프", width=400)
p.circle(x='x', y='y', size='size', source=source)

# 슬라이더 생성
size_slider = Slider(title="포인트 크기", start=0, end=10, step=0.1, value=1)

# 자바스크립트 콜백 함수 정의
callback = CustomJS(args=dict(source=source, size_slider=size_slider), code="""
    const data = source.data;
    const size = size_slider.value;
    const newSize = data['size'].map(x => x*size);
    data['size'] = newSize;
    source.change.emit();
""")

# 슬라이더 콜백 설정
size_slider.js_on_change('value', callback)

# 레이아웃 설정
lay = layout([[p], [size_slider]])

# 그래프 보여주기
show(lay)

위 코드에서는 ColumnDataSource를 사용하여 그래프 내부의 데이터를 관리하고, CustomJS를 사용하여 자바스크립트로 작성된 콜백 함수를 정의하여 트랜지션을 구현하였습니다. 슬라이더 값을 변경하면 포인트의 크기가 변하게 됩니다.

마치며

Bokeh을 사용하면 그래프 내부의 상호작용 및 트랜지션을 손쉽게 구현할 수 있습니다. 이를 통해 데이터를 더욱 효과적으로 시각화하고 사용자에게 보다 흥미로운 경험을 제공할 수 있습니다. 현재 Bokeh은 파이썬 2.7, 3.4+를 지원하며, 다양한 기능과 템플릿 등을 제공하고 있으니 적극 활용해보시기 바랍니다.