我正在拼命地将一个正在运行的散景小程序嵌入到烧瓶中,并且找不到合适的方法来执行此操作.我查看了所有示例,但我找不到一个包含更新数据的能力(最好的例子:sliders_applet).
如果我没弄错的话,我确实需要散景服务器才能更改数据(使用滑块等).以这种方式启动applet,例如:
bokeh-server --script sliders_app.py
Run Code Online (Sandbox Code Playgroud)
但我找不到合适的,或者至少是一种将sliders_app嵌入烧瓶的工作方式.由于应该可以使用多个applet,因此在散景服务器启动时指定一个小程序似乎并不干净.
我很乐意感谢任何帮助 - 散景看起来对我来说是一个很棒的工具.
我刚刚开始使用Bokeh.下面我创建一些用于rect图的 args .
x_length = var_results.index * 5.5
Run Code Online (Sandbox Code Playgroud)
将指数乘以5.5可以让我在标签之间留出更多空间.
names = var_results.Feature.tolist()
y_length = var_results.Variance
y_center = var_results.Variance/2
Run Code Online (Sandbox Code Playgroud)
var_results是一个Pandas数据帧,具有典型的,顺序的,非重复索引.var_results还有一个列Features是非重复名称的字符串,最后它有一个Variancedtype float 的列.
r = figure(x_range = names,
y_range = (-0.05,.3),
active_scroll = 'wheel_zoom',
x_axis_label = 'Features',
y_axis_label = 'Variance')
r.rect(x_length,
y_center,
width=1,
height=y_length,
color = "#ff1200")
output_notebook()
show(r)
Run Code Online (Sandbox Code Playgroud)
我基本上是用矩形制作条形图.Bokeh似乎非常可定制.但是我的图表在边缘看起来很粗糙.
正如您所看到的,在图表下方和X轴标题"特征"上方有一个丑陋的污迹.这是标签标题(技术上是矩形标题).如何为标签创建空间并将其旋转到45度,以便它们可读,而不仅仅是重叠的混乱?
我有一个散景(v0.11)服务应用程序,它使用数据框中的(x,y)坐标生成散点图.我想添加交互,以便当用户选择绘图上的点或在文本框中输入逗号分隔点的名称(即"p55,p1234")时,那些点将在散点图上变为红色.
我找到了一种方法来实现这一点(下面的策略#3),但对于大型数据帧来说速度非常慢.我认为有更好的方法.谁能帮我吗?我错过了一些明显的函数调用吗?
代码存放在pastebin上:http://pastebin.com/JvQ1UpzY最相关的部分复制如下.
def refresh_graph(self, selected_points=None, old_idxs=None, new_idxs=None):
# Strategy 1: Cherry pick current plot's source.
# Compute time for 100 points: < 1ms.
if self.strategy == 1:
t1 = datetime.now()
for idx in old_idxs:
self.graph_plot.data_source.data['color'][idx] = 'steelblue'
for idx in new_idxs:
self.graph_plot.data_source.data['color'][idx] = 'red'
print('Strategy #1 completed in {}'.format(datetime.now() - t1))
else:
t3 = datetime.now()
self.coords['color'] = 'steelblue'
self.coords.loc[selected_points, 'color'] = 'red'
new_source = bkmodels.ColumnDataSource(self.coords)
self.graph_plot = self.graph_fig.scatter('x', 'y', …Run Code Online (Sandbox Code Playgroud) 我理解你如何指定在Bokeh中显示的特定刻度,但我的问题是,是否有一种方法可以指定一个特定的标签来显示与位置.所以举个例子
plot.xaxis[0].ticker=FixedTicker(ticks=[0,1])
Run Code Online (Sandbox Code Playgroud)
将只显示0和1的x轴标签,但如果不显示0和1,我想显示Apple和Orange.就像是
plot.xaxis[0].ticker=FixedTicker(ticks=[0,1], labels=['Apple', 'Orange'])
Run Code Online (Sandbox Code Playgroud)
直方图不适用于我正在绘制的数据.反正在Bokeh中使用自定义标签吗?
能够以交互方式显示和隐藏散景图中的线条会很不错.说,我创建了这样的情节:
from bokeh.plotting import output_file, figure, show
from numpy.random import normal, uniform
meas_data_1 = normal(0, 1, 100)
meas_data_2 = uniform(-0.5, 0.5, 100)
output_file("myplot.html", title="My plot")
fig = figure(width=500, plot_height=500)
fig.line(x=range(0, len(meas_data_1)), y=meas_data_1)
fig.line(x=range(0, len(meas_data_2)), y=meas_data_2)
show(fig)
Run Code Online (Sandbox Code Playgroud)
如何添加以交互方式启用/禁用两条线之一的可能性?
我知道这是在愿望清单上(请参阅此功能请求),但这听起来不会太快实施.
我的印象是使用CheckBoxGroup和自定义的回调应该是可能的,但不幸的是这个回调必须用JavaScript编写,我完全没有经验.
例如,您可以使用以下代码在matplotlib中绘制图像:
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
img=mpimg.imread('image.png')
plt.imshow(img)
Run Code Online (Sandbox Code Playgroud)
Bokeh(0.10)有可能是这样的吗?
我是bokeh的新手,并试图弄清楚columnDataSource的作用.它出现在很多地方,但我不确定它的目的和工作原理.有人可以照亮吗?如果这是一个愚蠢的问题,请道歉......
我的问题与使用散景0.7.1的另一个线程非常相似,但散景服务器的API在0.12.0中已经发生了足够的变化,我正在努力使这个答案适应新版本.
总而言之,我有一个页面,其中包含一个时间流网格图,从不断更新的文件中提取数据.该页面有一个MultiSelect菜单,列出了我文件中的所有变量.我希望能够在菜单中选择不同的变量,按一个按钮,然后让现有变量的图消失并替换为新的时间流,其中图的数量可能不同.我正在使用bokeh serve --show script.py包装器运行我的脚本.
在我最初的尝试中,我为一个按钮分配了一个事件处理程序,它清除'curdoc',然后从MultiSelect添加新选择的变量的图.这会运行,但图表的数量不会更新.很明显,我错过了告诉服务器以某种方式刷新页面布局的调用.
import numpy as np
from bokeh.driving import count
from bokeh.plotting import figure, curdoc
from bokeh.layouts import gridplot
from bokeh.models import Slider, Column, Row, ColumnDataSource, MultiSelect, Button
from netCDF4 import Dataset
import datetime
# data
#data = Dataset('/daq/spt3g_software/dfmux/bin/output.nc', 'r', format='NETCDF4')
data = Dataset('20160714_warm_overbiased_noise.nc', 'r', format='NETCDF4')
vars = data.variables.keys()[1:11]
# plots
d = {('y_%s'%name):[] for name in vars}
d['t'] = []
source = ColumnDataSource(data=d)
figs = [figure(x_axis_type="datetime", title=name) for name in vars] …Run Code Online (Sandbox Code Playgroud) 我已经玩了一段时间的散景,现在我正处于创建互动情节并在线嵌入它们的步骤(例如,在WordPress的帖子中).
然而,即使我花了一些时间来审查和测试散景网站示例中的代码,我也很难理解curdoc()的目的究竟是什么.为了创建一个带有小部件的散景应用程序似乎是必要的,但是从我在资源中找到的内容来看,我并不十分理解它.
bokeh ×10
python ×7
applet ×1
bar-chart ×1
flask ×1
image ×1
javascript ×1
matplotlib ×1
pandas ×1