2017-12-18 1 views
0

에서 데이터 소스를 변경합니다. 그러나 플롯을 업데이트 할 수 없습니다. 내가 뭘 잘못 했니? 또는 더 좋은 방법이 있습니까?는 어떻게 선택 상자를 기반으로 플롯을 변경하려면 데이터 소스를 업데이트하려고 보케와 파이썬 2.7</p> <p>임을 사용하고 선택 보케

코드 :

from bokeh.models import ColumnDataSource 
from bokeh.plotting import figure, output_file, show, output_notebook 
from bokeh.models.widgets import Select 
from bokeh.io import curdoc 
from bokeh.layouts import column, row 
from bokeh.io import output_file, show 
from bokeh import models 
import pandas as pd 

d1 = dict(x= [10,4,6,4], y = [6,2,8,10]) 

d2 = dict(x= [23,12,50,30], y = [5,10,23,18,12]) 

source = ColumnDataSource(data=d1) 

p = figure() 

select = Select(title="Select d", options=['d1', 'd2']) 

def update_plot(attrname, old, new): 
    if new == 'd1': 
     newSource = d1 

    if new == 'd2': 
     newSource = d2 


    source.data = newSource 

p.line(x='x', y='y',source = source) 

select.on_change('value', update_plot) 
layout = column(row(select, width=400), p) 
curdoc().add_root(layout) 
show(layout) 
+0

'update_plot'이 실행되었는지 확인 하시겠습니까? on_change없이'update_plot'을 직접 호출 해 보았습니까? – hansaplast

+0

update_plot이 트리거되었는지 어떻게 확인할 수 있습니까? 필요한 'boolean'문서를 읽었습니다. 'on_change'함수 –

+0

'update_plot' 내에'print ('hello')'명령문을 추가 할 수 있습니까? – hansaplast

답변

1

는이처럼 나뭇잎 서버와 보케를 시작해야합니다 : 브라우저에서

bokeh serve myscript.py 

다음 열기 localhost:5006을.

서버없이 bokeh를 시작하면 정적 HTML 파일이 만들어 지므로 페이지 호출 기능을 사용하여 (print이 표시되지 않는 이유) 또는 페이지를 변경하는 방법이 없습니다. 초기로드 후 파이썬 코드. the docs에서 :

보케의 아키텍처는 높은 수준 "모델 객체"(플롯 같은 것을 나타내는, 범위, 축, 상형 문자 등) 파이썬에서 만든, 다음 JSON 형식으로 변환되도록입니다 클라이언트 라이브러리 BokehJS에서 사용합니다. [...] 그러나 파이썬과 브라우저에서 "모델 객체"를 서로 동기화 할 수 있다면 브라우저에서 생성 된 UI 및 도구 이벤트에 더 많은 계산 또는 응답을 할 수 있습니다. 파이썬의 모든 기능을 사용하는 쿼리

+1

Addtionally (단지 FYI)'show'는 Bokeh 앱 내부에서 usefu가 아니며 무시됩니다 (그러나 자동으로 브라우저를 열려면'bokeh serve '에'--show'를 전달할 수 있습니다). – bigreddot

관련 문제