[파이썬] bokeh 그래프 내부 이벤트 및 신호 처리

Bokeh는 파이썬 기반의 인터랙티브한 데이터 시각화를 위한 도구입니다. Bokeh를 사용하면 그래프를 표현하고, 이벤트를 처리하고, 신호를 다루는 등 다양한 작업을 수행할 수 있습니다. 이 블로그 글에서는 Bokeh를 사용하여 그래프 내부 이벤트를 처리하고 신호를 다루는 방법을 알아보겠습니다.

그래프 내부 이벤트 처리

Bokeh 그래프에서는 마우스 클릭, 이동, 확대/축소 등의 이벤트를 감지하고 처리할 수 있습니다. 아래는 간단한 예제 코드입니다.

from bokeh.plotting import figure, show
from bokeh.events import Tap

# 데이터 생성
x = [1, 2, 3, 4, 5]
y = [6, 7, 2, 4, 5]

# 그래프 생성
p = figure()
p.circle(x, y, size=20)

# 이벤트 핸들러 함수
def on_tap(event):
    print("마우스 클릭!")
    print(f"클릭한 위치: ({event.x}, {event.y})")

# 이벤트 등록
p.on_event(Tap, on_tap)

# 그래프 표시
show(p)

위 코드에서 Tap 이벤트를 사용하여 마우스 클릭을 처리하고 있습니다. on_tap 함수는 이벤트 핸들러로, 클릭 이벤트가 발생하면 해당 함수가 호출됩니다.

신호 처리

Bokeh를 사용하여 그래프 내부의 신호와 상호 작용할 수도 있습니다. 예를 들어, 슬라이더를 조작하면 그래프에 표시되는 데이터를 업데이트할 수 있습니다. 아래는 신호 처리를 위한 예제 코드입니다.

from bokeh.plotting import figure, show
from bokeh.models import Slider
from bokeh.io import curdoc

# 데이터 초기화
x = [1, 2, 3, 4, 5]
y = [6, 7, 2, 4, 5]

# 그래프 생성
p = figure()
line = p.line(x, y)

# 신호 처리 함수
def update_data(attr, old, new):
    print("슬라이더 변경!")
    print(f"변경된 값: {slider.value}")

    # 데이터 업데이트
    y = [val * slider.value for val in y]
    line.data_source.data['y'] = y

    # 그래프 업데이트
    curdoc().patch(line, line.data_source)

# 슬라이더 생성
slider = Slider(start=1, end=10, value=1, step=1, title="효과 크기")
slider.on_change('value', update_data)

# 그래프 표시
show(p)

위 코드에서는 Slider를 사용하여 신호를 생성하고, update_data 함수에서 해당 신호를 처리하고 그래프를 업데이트합니다. Slider의 값을 변경하면 on_change 이벤트가 발생하고, 해당 이벤트에서는 update_data 함수가 호출됩니다.

이렇게 Bokeh를 사용하여 그래프 내부의 이벤트 및 신호를 처리할 수 있습니다. Bokeh는 데이터 시각화와 상호 작용에 매우 유용한 도구이며, 다양한 활용 방법을 통해 인터랙션 그래프를 구현할 수 있습니다.