2017-12-20 58 views
0

대화 형 위젯을 사용하여 Bokeh 응용 프로그램을 실행하고 싶지만 완전히 작동하지는 않습니다.대화 형 위젯을 사용하여 Bokeh 실행

내 코드 demo.py : 나는 bokeh serve --show demo.py와 명령 줄 인터페이스에서이 응용 프로그램을 실행하면

# imports 
import pandas as pd 
from bokeh.io import curdoc 
from bokeh.layouts import column 
from bokeh.models import ColumnDataSource, Dropdown 
from bokeh.plotting import figure 
from bokeh.sampledata.iris import flowers 

# Data 
df = pd.DataFrame({'x': flowers['sepal_length'], 'y': flowers['sepal_width'], 'species': flowers['species']}) 

# Source 
SPECIES = 'versicolor' 
source = ColumnDataSource(df.loc[df.species == SPECIES]) 

# Create plots and widgets 
plot = figure() 
plot.circle(x= 'x', y='y', source=source) 

menu = [("setosa", "setosa"), ("versicolor", "versicolor"), None, ("virginica", "virginica")] 
dropdown = Dropdown(label="Dropdown species", button_type="warning", menu=menu) 

# Add callback to widgets 
def callback(attr, old, new): 
    SPECIES = dropdown.value 
    source.data=ColumnDataSource(df.loc[df.species == SPECIES]) 
dropdown.on_change('value', callback) 

# Arrange plots and widgets in layouts 
layout = column(dropdown, plot) 
curdoc().add_root(layout) 

, 그것은 음모가있는 HTML 페이지를 반환합니다. 드롭 다운이 작동하는 것처럼 보이지만 드롭 다운에서 값을 선택하면 플롯이 변경되지 않습니다.

제안 사항 해결 방법

답변

1

source.data에 올바른 값을 지정하지 않았습니다. 이 값은 열 이름을 데이터 목록/배열에 매핑하는 일반 Python dict 일 필요가 있습니다. 이 워드 프로세서 및 예에서 입증 것을 할 수있는 다양한 방법이 있지만, 하나의 좋은 방법은 DICT의 오른쪽 종류 생성하는 CDS의 from_df 클래스 메소드를 사용하는 것입니다 :

source.data = ColumnDataSource.from_df(df.loc[df.species == SPECIES]) 

그 라인은 당신의 코드가 작동합니다을 예상대로 에 ValueError는 (은 "예상 : 취급 메시지 메시지 'PATCH-DOC'(개정 1)

오류 :로

는 참고로, 코드는 (예상한다대로) 서버 콘솔 출력에서 ​​오류가 발생합니다 ColumnData의 요소 (문자열, 서열은 (모두)) ") 부드러운 제안으로

, 그것은 항상이다 ('44e09b5e-133B-4c1b-987b-cbf80b803401', ...는 = ID) ColumnDataSource있어 그 질문에 그러한 오류를 포함시키는 것이 좋습니다.

+0

도움과 친절한 제안에 감사드립니다. ;-) – Rene