数据框交互式图:下拉菜单显示 select 列(散景)
Interactive Plot of Data frame: Drop Down menu to select columns to Display (Bokeh)
我是第一次尝试使用 Bokeh 库,但我发现文档不是那么简单。
我有一个数据框 df:
A B C
1 4 6
2 3 5
3 2 4
4 1 3
我想使用集成了小部件的 Boken 创建直方图,以便用户 select 显示一列(A B 或和 C)。
我写了以下内容:
import pandas as pd
d= {'A': [1, 2,3,4], 'cB': [4,3,2,1], 'C' : [6,5,4,3]}
df = pd.DataFrame(data=d)
names = ["A","B", "C"]
from bokeh.io import output_file, show
from bokeh.layouts import widgetbox
from bokeh.models.widgets import MultiSelect
from bokeh.io import curdoc
# drop table
curdoc().clear()
# create drop down #define witget
output_file("multi_select.html")
Field = MultiSelect(title="Features:", value=["A"],
options=names)
show(widgetbox(Field))
from bokeh.charts import Histogram, output_file, show
from bokeh.layouts import row, layout
from bokeh.models.sources import ColumnDataSource
curdoc().clear()
source = ColumnDataSource(df)
hist = Histogram(df, values="A", title="A", plot_width=400) #not sure why I cannot use source instead of df
output_file('hist.html')
show(hist)
所以现在我需要将绘图与小部件连接起来。
我尝试了下面的方法,但它似乎不起作用。
hist = Histogram(df, values={'Field'}, title={'Field'}, plot_width=400)
欢迎使用任何其他不使用 bokeh 库的解决方案,我 运行 使用 Spyder 编辑器编写代码,并使用 IE 可视化结果。
所以我仍然没有设法使用带有回调函数和数据帧的散景。但是,在使用 Jupiter 时,我发现了一个非常简单的替代方法,
import matplotlib.pyplot as pl
hue = ["A", "B"]
@interact (col= ["A", "B", "C"])
def plot(col):
pl.figure()
pl.hist( df[col])
pl.show()
plot(col)
使用此代码您将能够与列进行交互。我正在使用最新版本的 Pandas、Numpy 和 Bokeh。在新更新中 Bokeh.charts 已弃用。
import pandas as pd
import numpy as np
#Pandas version 0.22.0
#Bokeh version 0.12.10
#Numpy version 1.12.1
from bokeh.io import output_file, show,curdoc
from bokeh.models import Quad
from bokeh.layouts import row, layout,widgetbox
from bokeh.models.widgets import Select,MultiSelect
from bokeh.plotting import ColumnDataSource,Figure,reset_output,gridplot
d= {'A': [1,1,1,2,2,3,4,4,4,4,4], 'B': [1,2,2,2,3,3,4,5,6,6,6], 'C' : [2,2,2,2,2,3,4,5,6,6,6]}
df = pd.DataFrame(data=d)
names = ["A","B", "C"]
#Since bokeh.charts are deprecated so using the new method using numpy histogram
hist,edge = np.histogram(df['A'],bins=4)
#This is the method you need to pass the histogram objects to source data here it takes edge values for each bin start and end and hist gives count.
source = ColumnDataSource(data={'hist': hist, 'edges_rt': edge[1:], 'edges_lt':edge[:-1]})
plot = Figure(plot_height = 300,plot_width = 400)
#The quad is used to display the histogram using bokeh.
plot.quad(top='hist', bottom=0, left='edges_lt', right='edges_rt',fill_color="#036564",
line_color="#033649",source = source)
#When you change the selection it will this function and changes the source data so that values are updated.
def callback_menu(attr, old, new):
hist,edge = np.histogram(df[menu.value],bins=4)
source.data={'hist': hist,'edges_rt': edge[1:], 'edges_lt': edge[:-1]}
#These are interacting tools in the final graph
menu = MultiSelect(options=names,value= ['A','B'], title='Sensor Data')
menu.on_change('value', callback_menu)
layout = gridplot([[widgetbox(menu),plot]])
curdoc().add_root(layout)
保存文件后,在同一目录的 Anaconda 提示符下使用以下命令启动 bokeh 服务器,以便您可以与图形进行交互。
bokeh serve --show Python_Program_Name.py
一旦你 运行 图表和 select 看起来像这样
我是第一次尝试使用 Bokeh 库,但我发现文档不是那么简单。
我有一个数据框 df:
A B C
1 4 6
2 3 5
3 2 4
4 1 3
我想使用集成了小部件的 Boken 创建直方图,以便用户 select 显示一列(A B 或和 C)。
我写了以下内容:
import pandas as pd
d= {'A': [1, 2,3,4], 'cB': [4,3,2,1], 'C' : [6,5,4,3]}
df = pd.DataFrame(data=d)
names = ["A","B", "C"]
from bokeh.io import output_file, show
from bokeh.layouts import widgetbox
from bokeh.models.widgets import MultiSelect
from bokeh.io import curdoc
# drop table
curdoc().clear()
# create drop down #define witget
output_file("multi_select.html")
Field = MultiSelect(title="Features:", value=["A"],
options=names)
show(widgetbox(Field))
from bokeh.charts import Histogram, output_file, show
from bokeh.layouts import row, layout
from bokeh.models.sources import ColumnDataSource
curdoc().clear()
source = ColumnDataSource(df)
hist = Histogram(df, values="A", title="A", plot_width=400) #not sure why I cannot use source instead of df
output_file('hist.html')
show(hist)
所以现在我需要将绘图与小部件连接起来。
我尝试了下面的方法,但它似乎不起作用。
hist = Histogram(df, values={'Field'}, title={'Field'}, plot_width=400)
欢迎使用任何其他不使用 bokeh 库的解决方案,我 运行 使用 Spyder 编辑器编写代码,并使用 IE 可视化结果。
所以我仍然没有设法使用带有回调函数和数据帧的散景。但是,在使用 Jupiter 时,我发现了一个非常简单的替代方法,
import matplotlib.pyplot as pl
hue = ["A", "B"]
@interact (col= ["A", "B", "C"])
def plot(col):
pl.figure()
pl.hist( df[col])
pl.show()
plot(col)
使用此代码您将能够与列进行交互。我正在使用最新版本的 Pandas、Numpy 和 Bokeh。在新更新中 Bokeh.charts 已弃用。
import pandas as pd
import numpy as np
#Pandas version 0.22.0
#Bokeh version 0.12.10
#Numpy version 1.12.1
from bokeh.io import output_file, show,curdoc
from bokeh.models import Quad
from bokeh.layouts import row, layout,widgetbox
from bokeh.models.widgets import Select,MultiSelect
from bokeh.plotting import ColumnDataSource,Figure,reset_output,gridplot
d= {'A': [1,1,1,2,2,3,4,4,4,4,4], 'B': [1,2,2,2,3,3,4,5,6,6,6], 'C' : [2,2,2,2,2,3,4,5,6,6,6]}
df = pd.DataFrame(data=d)
names = ["A","B", "C"]
#Since bokeh.charts are deprecated so using the new method using numpy histogram
hist,edge = np.histogram(df['A'],bins=4)
#This is the method you need to pass the histogram objects to source data here it takes edge values for each bin start and end and hist gives count.
source = ColumnDataSource(data={'hist': hist, 'edges_rt': edge[1:], 'edges_lt':edge[:-1]})
plot = Figure(plot_height = 300,plot_width = 400)
#The quad is used to display the histogram using bokeh.
plot.quad(top='hist', bottom=0, left='edges_lt', right='edges_rt',fill_color="#036564",
line_color="#033649",source = source)
#When you change the selection it will this function and changes the source data so that values are updated.
def callback_menu(attr, old, new):
hist,edge = np.histogram(df[menu.value],bins=4)
source.data={'hist': hist,'edges_rt': edge[1:], 'edges_lt': edge[:-1]}
#These are interacting tools in the final graph
menu = MultiSelect(options=names,value= ['A','B'], title='Sensor Data')
menu.on_change('value', callback_menu)
layout = gridplot([[widgetbox(menu),plot]])
curdoc().add_root(layout)
保存文件后,在同一目录的 Anaconda 提示符下使用以下命令启动 bokeh 服务器,以便您可以与图形进行交互。
bokeh serve --show Python_Program_Name.py
一旦你 运行 图表和 select 看起来像这样