问题描述
我正在尝试使用散景可视化从熊猫数据框中绘制汇总统计信息。我的目标是使用滑块过滤要绘制的数据并相应地更新绘图。但是,当我启动散景应用程序时,两者都没有发生。
这是我正在使用的一些模拟数据:-
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 (将#修改为@)