散景 - 滑块,无线电组回调冲突



这是我散景的简化版本: 东风

YEAR |  AMOUNT   |NAME  |  NEST           |  FUND
2011     10        Joe      ("Q1",Jan")      JPN
2012    -20        Joe      ("Q2","Feb")     CAD
2013     30        Joe      ("Q3", "Apr")    USD
2011     12        Arn      ("Q1",Jan")      USD
2012    -250       Arn      ("Q2","Feb")     JPN
2013    -36        Arn      ("Q3", "Apr")    JPN

我有一个堆叠分组条形图,显示 Joe 或 Arn 的金额。乔或阿恩由radio_group控制。堆栈是FUND的。轴组NEST

factors = [
("Q1", "Jan"), ("Q1", "Feb"), ("Q1", "Mar"),
("Q2", "Apr"), ("Q2", "May"), ("Q2", "Jun"),
("Q3", "Jul"), ("Q3", "Aug"), ("Q3", "Sep"),
("Q4", "Oct"), ("Q4", "Nov"), ("Q4", "Dec"),
]
stacks=list(set(df.loc[df['FUND']))
bar_src= ColumnDataSource(data=df)
p= figure(plot_width=1150, plot_height=550, x_range=FactorRange(*factors))
view = CDSView(source=bar_src, filters=[GroupFilter(column_name="Name", group="Joe")])    
p.vbar_stack(stacks, x = "NESTS", width = 0.9 source = bar_src, view=view)
radio_group=RadioGroup(labels=['Joe','Arn'], active=0)
radio_group.callback=CustomJS(args=dict(source = bar_src, filter=view.filters[0]),
code="""filter.group = cb_obj.labels[cb_obj.active]
source.change.emit();""")

我也有一年Slider

def year_chg(attr,old,new):
new_df = pd.DataFrame({
'YEAR':df['YEAR'][df['YEAR']==slider.value],
'NEST':df['NEST'][df['YEAR']==slider.value],
'NAME':df['ACCT_NUM'][df['YEAR']==slider.value],
'FUND':df['FUND'][df['YEAR']==slider.value],
'AMOUNT':df['AMOUNT'][df['YEAR']==slider.value],
})
new_data=ColumnDataSource(data=new_df)
bar_src.data = new_data.data
slider= Slider(start=2011, end=2013.year, step=1, value=2013, title='Year')
slider.on_change('value',year_chg)

这些交互都是孤立工作的。但是,当组合在一起时,滑动滑块会导致左上角出现一个空白图,其中包含非常小的字符。

我还尝试将无线电 CustomJS 包装成 python 函数,然后调用radio_group.js_on_change("active", CustomJS.from_py_func(change_name))但它会产生相同的结果。

出了什么问题?

如果没有一个完整的最小复制器,很难说出任何具体的东西,但是,您不应该像在year_chg中那样将.data从一个 CDS 分配给另一个 CDS。在即将到来的散景2.0中,尝试这样做会引发明确的错误消息。虽然它的行为类似于dict,但事实并非如此。为了支持Python和JS之间的所有自动同步,CDS.data实际上是一个非常特殊的数据结构,它与许多其他事物有链接,并且不支持将它们从一个CDS"重新归巢"到另一个CDS。你应该只从普通的python字典中分配给.data

source.data = { ... } # plain python dict

如果您需要调整数据帧,CDS 上有一个.from_df方法,该方法将创建可用于分配的适当纯 python 字典结构。

最新更新