代码之家  ›  专栏  ›  技术社区  ›  machump

Bokeh-数据表更新标签文本(0.12.16->0.13.0修复作业)

  •  0
  • machump  · 技术社区  · 7 年前

    我最近发现,新的bokeh为堆积条形图实现了更详细的悬停选项。头晕,我马上更新了bokeh,并将其合并到嵌套的堆叠vbar中。不过,在我不知道的情况下,我在上一版本中实现的一个不相关的回调不再工作,我不知道如何修复它。

    我有一个数据表,它的行有几列数字。选择行将对每个选定行的列求和,并将其显示在 Label . 此方面在0.13.0中不再有效。请参阅下面的简化娱乐:

    Dataframe(df):
    NAME  |  Sales  |  Returns | YEAR
    John      33        3        2018
    Mike      12        3        2018
    Jim       19        9        2018
    Tim        3        1        2017
    Tom       20        0        2017
    
    import pandas as pd
    from bokeh.models import (ColumnDataSource, LabelSet, TapTool, OpenURL,CustomJS, NumberFormatter,
                                  TableColumn, DataTable, Slider, CDSView,HoverTool,PreText, BoxSelectTool,
                                  Label, Text, Button)
    from bokeh.plotting import figure
    from bokeh.io import curdoc
    from bokeh.layouts import layout, column
    from datetime import date
    from bokeh.core.properties import expr
    from bokeh.palettes import Spectral10
    
    source=ColumnDataSource(data=df)
    
    columns=[TableColumn(field="NAME", title="NAME"),
    TableColumn(field="Sales", title= "Sales"),
    TableColumn(field="Returns",title="Returns")]
    
    data_table=DataTable(source=source, columns=columns)
    
    def statsline(attr,old,new):
        selection=source.selected.indices
        if selection:
            sales=sum(source.data['Sales'][selection])
            returns=sum(source.data['Returns'][selection])
    
            income.text="SELECTION | Sales: " + str(sales) + " | Returns: " + str(returns)
    p_stat=figure(plot_width=1400, plot_height=60, toolbar_location=None)
    
    income=Label(x_units='screen',y_units='screen',x=90, y=5,
                 text="Sales: " + str(df["Sales"][df["YEAR"]==date.today().year].sum()) +"   |   
                 Returns: " +str(df["Returns"][df["YEAR"]==date.today().year].sum()),
                 text_font_size='20pt')
    p_stat.add_layout(income)
    source.on_change('selected', statsline)
    
    layout=layout([p_stat],[data_table])
    curdoc().add_root(layout)
    

    提前谢谢。 还有,有没有一种不那么老套的方法来显示bokeh中的kpi?我没什么主意了。

    1 回复  |  直到 7 年前
        1
  •  0
  •   bigreddot    7 年前

    Bokeh中有几个与数据表相关的回归 0.13.0 ,它们将在下一个版本中解决。目前(以及今后),这种模式将起作用:

    source.selected.on_change('indices', ...)
    
    推荐文章