2016-12-19 33 views
0

我想在我的散景圖中添加複選框,以便我可以隱藏或在我的情節中顯示不同的線條。我發現,在背景虛化的github下面的代碼而這正是這個:散景複選框不對應於陰謀中的右邊線

import numpy as np 

from bokeh.io import output_file, show 
from bokeh.layouts import row 
from bokeh.palettes import Viridis3 
from bokeh.plotting import figure 
from bokeh.models import CheckboxGroup, CustomJS 

output_file("line_on_off.html", title="line_on_off.py example") 

p = figure() 
props = dict(line_width=4, line_alpha=0.7) 
x = np.linspace(0, 4 * np.pi, 100) 
l0 = p.line(x, np.sin(x), color=Viridis3[0], legend="Line 0", **props) 
l1 = p.line(x, 4 * np.cos(x), color=Viridis3[1], legend="Line 1", **props) 
l2 = p.line(x, np.tan(x), color=Viridis3[2], legend="Line 2", **props) 

checkbox = CheckboxGroup(labels=["Line 0", "Line 1", "Line 2"], 
         active=[0, 1, 2], width=100) 
checkbox.callback = CustomJS(args=dict(l0=l0, l1=l1, l2=l2,  checkbox=checkbox), 
          code=""" 
            l0.visible = 0 in checkbox.active; 
            l1.visible = 1 in checkbox.active; 
            l2.visible = 2 in checkbox.active; 
            """) 

layout = row(checkbox, p) 
show(layout) 

它可以產生「line_on_off.html」與交互功能。但是,如果我取消選中一個箱子,無論哪個箱子都是隱藏的。如果我取消選中兩個盒子,無論哪一個,l1和l2總是隱藏的。

我也嘗試了其他代碼,它將在散景服務器上生成相同的圖並且作爲意圖工作。但我希望將它保存爲具有交互功能的離線文件,而不是保持運行服務器。

任何想法,爲什麼它不能在離線文件中正確行爲?

+0

我認爲這是一個在最近版本中修復的錯誤。請始終提供問題時始終提供版本信息。 – bigreddot

+0

從我的經驗來看,它並不是像'JavaScript's'in'那樣是Bokeh中的一個bug –

+0

在散景github中的示例代碼使用'CustomJS.from_coffeescript(args = dict(l0 = l0,l1 = l1,l2 = l2,checkbox = checkbox),code =「」「'而不是CustomJS(args = dict(l0 = l0,l1 = l1,l2 = l2,checkbox = checkbox),code =」「」' –

回答

1

這是我碰到的一個問題earlier。它與JavaScript檢查in的工作方式有關。它檢查0,1或2是否在checkbox.active數組索引中。

我解決了它,例如通過切換到CoffeeScript或使用checkbox.active.indexOf('0')>-1)作爲測試。這兩種方法都可以工作