微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pandas 数据框和散景图未使用滑块小部件更新

如何解决Pandas 数据框和散景图未使用滑块小部件更新

我正在尝试使用散景可视化从熊猫数据框中绘制汇总统计信息。我的目标是使用滑块过滤要绘制的数据并相应地更新绘图。但是,当我启动散景应用程序时,两者都没有发生。

这是我正在使用的一些模拟数据:-

Device,Column1,Column2,Column3,Column4,Hour,Day
aaa,98,59,56,57,22,Day one
aaa,29,10,14,15,21,4,72,25,13,87,83,1,41,46,81,9,85,42,16,12,73,5,32,19,84,30,34,28,11,63,50,86,48,17,74,37,79,40,88,67,Day one
bbb,6,2,26,75,27,62,51,71,24,66,49,18,7,35,38,94,65,8,23,76,58,33,89,20,39,60,69,93,52,45,61,96,Day one
ccc,92,97,78,55,3,Day one
ddd,80,Day one
eee,44,70,54,31,82,Day two
eee,95,77,68,Day two
fff,36,43,64,90,53,91,Day two
ggg,Day two

编辑

我已修改我的代码添加其他功能,例如交换列,但我的问题仍然存在。我无法更新源数据以按小时过滤,然后相应地更新绘图。

from bokeh.util.sampledata import DataFrame
import numpy as np
import pandas as pd
from bokeh.io import curdoc,show

from bokeh.plotting import figure
from bokeh.layouts import row,column,widgetBox
from bokeh.palettes import Category20 as palette
from bokeh.models import Select,CustomJS,CheckBoxButtonGroup,ColumnDataSource,IndexFilter,Slider,CDSView,WidgetBox ### Widgets
df = pd.read_csv("exampledata.csv")

#getting grouped means
grouped_devices=df.groupby(['Device','Day','Hour'])['Column1','Column2','Column3','Column4'].mean()
grouped_devices_counts=df.groupby(['Device','Hour']).size()#get counts of devices

grouped_devices_counts=grouped_devices_counts.reset_index()
grouped_devices_counts = grouped_devices_counts.rename(columns= {0: 'Count'})#works
#merge
group_device_summary=pd.merge(grouped_devices,grouped_devices_counts,on=['Day','Hour','Device'])#works

hournum=11
group_device_summary_dayone=group_device_summary[(group_device_summary['Day']=="Day one")] 
data=group_device_summary_dayone.to_dict()
source=ColumnDataSource(group_device_summary_dayone)


p=figure(toolbar_location="above")
# Add a circle glyph to the figure p
scatter=p.circle('Column1',source=source,color='red',legend_label='Day one')

handlerx = CustomJS(args=dict(scatter=scatter),code="""
   scatter.glyph.x = {field: cb_obj.value};
""")
handlery = CustomJS(args=dict(scatter=scatter),code="""
   scatter.glyph.y = {field: cb_obj.value};
""")
#slider=Slider(start=0,end=23,step=1,value=hournum)
sliderhour=Slider(start=0,value=hournum)
sliderhandler = CustomJS(
    #### THIS IS THE PART I NEED HELP WITH ######
     

    args=dict(source=source),code="""
    data = source.data;
    hournum=cb_obj.value;
    newdata = group_device_summary_dayone[(group_device_summary_dayone['Hour']==hournum)];
    source.data = newdata;


    """
    )

selectx = Select(title="df-column:",options=list(group_device_summary_dayone.columns))
selectx.js_on_change('value',handlerx)
selecty = Select(title="df-column:",options=list(group_device_summary_dayone.columns))
selecty.js_on_change('value',handlery)
sliderhour.js_on_change('value',sliderhandler)
show(column(selectx,selecty,sliderhour,p))


谁能指出我需要修改哪些内容以允许滑块功能更新我的数据框?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。