我在Jupyter笔记本中有一个散景图,我想在Bokeh选择改变时运行自定义Python.每当使用源更改回调更改Bokeh选项时,运行自定义Javascript非常容易,但我无法触发Jupyter响应事件.
我认为有可能但记录不完整(请参阅http://bokeh.pydata.org/en/latest/docs/user_guide/server.html)运行单独的Bokeh服务器来接收事件.我想避免运行单独的Bokeh服务器,因为Jupyter服务器已经运行.
我一直在研究这个Udacity web dev课程,并想尝试使用这个例子将简单的散景图嵌入到网页中.运行dev_appserver.py给出错误:ImportError: No module named _ctypes
我有:
这个答案表明Google App Engine不允许导入ctypes.但是我不确定如何确认Bokeh是否属于这种情况.这是由Bokeh导入ctypes引起的错误吗?如果有的话有解决方法吗?
ERROR 2017-01-21 19:14:53,799 wsgi.py:263]
Traceback (most recent call last):
File "C:\Users\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform
\google_appengine\google\appengine\runtime\wsgi.py", line 240, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
File "C:\Users\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform
\google_appengine\google\appengine\runtime\wsgi.py", line 299, in _LoadHandler
handler, path, err = LoadObject(self._handler)
File "C:\Users\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform
\google_appengine\google\appengine\runtime\wsgi.py", line 85, in LoadObject
obj = __import__(path[0])
File "C:\Users\Google Drive\Udacity web development 2017\udacit
y-cs253\bokeh\1_docs_example\main.py", line 2, in …Run Code Online (Sandbox Code Playgroud) 我有一个带有python控制器的Web应用程序,其中输出图由Bokeh绘制.在我的主template.html文件中,我加载了bokeh-0.9.2.min.css和bokeh-0.9.2.min.js,如下所示.
我的问题是"如果我在离线模式下将我的网络应用程序作为浏览器应用程序运行,是否可以将这两个文件下载到我的static/jss文件夹中并离线运行?"
<link rel="stylesheet" href="http://cdn.bokeh.org/bokeh/release/bokeh-0.9.2.min.css" type="text/css" />
<script type="text/javascript" src="http://cdn.bokeh.org/bokeh/release/bokeh-0.9.2.min.js"></script>
Run Code Online (Sandbox Code Playgroud) 我想在Bokeh中结合这两个例子:
http://bokeh.pydata.org/en/latest/docs/gallery/image.html http://bokeh.pydata.org/en/latest/docs/user_guide/interaction/callbacks.html#customjs-for-widgets
这个想法似乎很简单.我想绘制第一个链接中显示的图像,然后使用交互式滑块改变正弦函数的频率:
import numpy as np
from bokeh.plotting import figure, show, output_file
from bokeh.models import CustomJS, ColumnDataSource, Slider
from bokeh.io import vform
N = 10
x = np.linspace(0, 10, N)
y = np.linspace(0, 10, N)
xx, yy = np.meshgrid(x, y)
d = np.sin(xx)*np.cos(yy)
output_file("image.html", title="image.py example")
source = ColumnDataSource(data={'d': d, 'x': x, 'y': y})
p = figure(x_range=[0, 10], y_range=[0, 10])
p.image([source.data['d']], x=[0], y=[0], dw=[10], dh=[10], palette="Spectral11")
callback = CustomJS(args=dict(source=source), code="""
var data = source.get('data');
var f = cb_obj.get('value') …Run Code Online (Sandbox Code Playgroud) 我目前正在开展一个项目,我希望使用Bokeh输出3D交互式散点图.我想基于2或3个类别对点进行着色,并且我希望在悬停它之后显示与点相对应的基因.我知道Bokeh没有完全实现3D图,我发现了以下脚本,它允许用python(原始代码)生成这样的3D图.
虽然原始代码生成了3D表面,但是通过阅读文档,我已经设法生成了3D绘图.我还设法根据类别对点进行着色.但是,当我尝试生成工具提示时,其信息将在python(或任何其他)中的'extra'变量中编码,我无法生成该信息.我不了解JS,所以我只是想调整变量来看看会发生什么.
我制作的代码是这样的:
from __future__ import division
from bokeh.core.properties import Instance, String
from bokeh.models import ColumnDataSource, LayoutDOM
from bokeh.io import show
import numpy as np
JS_CODE = """
# This file contains the JavaScript (CoffeeScript) implementation
# for a Bokeh custom extension. The "surface3d.py" contains the
# python counterpart.
#
# This custom model wraps one part of the third-party vis.js library:
#
# http://visjs.org/index.html
#
# Making it easy to hook up python data analytics …Run Code Online (Sandbox Code Playgroud) 我最终希望能够在其他图像的顶部绘制,然后保存绘图数据以供以后查看。
我试过使用 matplotlib。我得到了它的功能,如这里所述,但遇到了很多问题,因为我无法在另一个窗口中打开它,并且当它显示内联时,回调事件不能正确触发。
我正在连接到远程 jupyter 服务器,所以我认为一切都需要内联。我读过一些关于散景的东西,看起来它可能有用,但我不知道从哪里开始。
使用 javascript 这似乎很容易,但我不知道如何让 javasctipt 在 jupyter 中运行。至少当它不仅仅是一行或 2 行时不会。
链接中的散景0.12.1的官方文档提供了以下用于创建下拉列表的代码.
但是,当有人点击并从下拉列表中选择一个值时,它没有明确提到如何捕获下拉窗口小部件的值.
from bokeh.io import output_file, show
from bokeh.layouts import widgetbox
from bokeh.models.widgets import Dropdown
output_file("dropdown.html")
menu = [("Item 1", "item_1"), ("Item 2", "item_2"), None, ("Item 3", "item_3")]
dropdown = Dropdown(label="Dropdown button", button_type="warning", menu=menu)
show(widgetbox(dropdown))
Run Code Online (Sandbox Code Playgroud)
题
是看到有2个方法叫做on_click()&on_change()但是从文档中无法弄清楚如何捕获值.我们如何将选定的值分配给新变量?
编辑
根据@Ascurion的输入,我更新了我的代码,如下所示.但是当我在下拉列表中选择一个值时,Spyder的ipython控制台中不会打印任何内容.请指教.
from bokeh.io import output_file, show
from bokeh.layouts import widgetbox
from bokeh.models.widgets import Dropdown
output_file("dropdown.html")
menu = [("Item 1", "item_1"), ("Item 2", "item_2"), None, ("Item 3", "item_3")]
dropdown = Dropdown(label="Dropdown button", button_type="warning", menu=menu)
def function_to_call(attr, old, new):
print dropdown.value
dropdown.on_change('value', function_to_call) …Run Code Online (Sandbox Code Playgroud) 在 Datacamp Bokeh 课程中宣布,Anaconda Cloud 可以提供散景代码,而不会出现任何复杂的分期付款问题。但是,我对 Anaconda 的了解不足以实现这一目标。
我的问题如下:
起点: - 我有一段用于交互式散景图的 Python 代码
所需端点: - 我想在 Anaconda Cloud 上托管代码,以便外部用户可以通过浏览器访问绘图,而无需安装 python。
我的主要问题是,目前是否有关于如何从起点到终点的简单“傻瓜”教程?
我目前对 anaconda 的理解以完全了解我必须采取哪些步骤以及我需要实现我的目标的 Anaconda/Bokeh 文档的哪些部分。
示例代码取自:
使用下面的代码,我可以获得带有4个图的2x2图.使用画笔,我可以选择一些数据点.我的问题是如何将选定的数据点作为JSON数组或cvs.此代码使用mlpd3,但散景可以使用画笔进行类似的选择.但是没有选择数据点的示例.我试图将选定的数据作为对象继续使用python进行处理.在单元格中查看数据会很高兴.
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mat
import mpld3
mpld3.enable_notebook()
from mpld3 import plugins
fig, ax = plt.subplots(2, 2, figsize=(10, 8))
fig.subplots_adjust(hspace=0.1, wspace=0.1)
ax = ax[::-1]
X = np.random.normal(size=(2, 100))
for i in range(2):
for j in range(2):
ax[i, j].xaxis.set_major_formatter(plt.NullFormatter())
ax[i, j].yaxis.set_major_formatter(plt.NullFormatter())
points = ax[i, j].scatter(X[j], X[i])
plugins.connect(fig, plugins.LinkedBrush(points))
Run Code Online (Sandbox Code Playgroud)
Bokeh在CustomJS for Selections中具有类似的行为
无论哪一个更容易提取所选项目 - 都可行..如果有一个Plotly解决方案,那也可以.
我有一个数据集,我想在 X 轴上绘制具有 2 个不同变量的绘图(在 2 个不同的图中),但我想将其他值放入 Hovertool
from io import StringIO
import pandas as pd
data = """,item_id,start,station,rejects
0,item1,2019-10-14 19:00:00,assembly,4.297994269340974
1,item1,2019-10-14 19:00:00,ST1,0.20546537908362442
2,item1,2019-10-14 19:00:00,ST2,0.494539460127756
3,item1,2019-10-14 19:00:00,ST3,0.6892230576441103
4,item2,2019-10-14 23:30:00,assembly,4.432249894470241
5,item2,2019-10-14 23:30:00,ST1,0.19071837253655435
6,item2,2019-10-14 23:30:00,ST2,0.7651434643995749
7,item2,2019-10-14 23:30:00,ST3,0.7748600947051227
8,item3,2019-10-15 04:00:00,assembly,3.55576079427384
9,item3,2019-10-15 04:00:00,ST1,0.37002775208140615
10,item3,2019-10-19 04:00:00,ST2,0.7195914577530177
11,item3,2019-10-19 04:00:00,ST3,0.492379835873388
12,item4,2019-10-19 10:30:00,assembly,4.02656704026567
13,item4,2019-10-19 10:30:00,ST1,0.22926219258024177
14,item4,2019-10-19 10:30:00,ST2,0.690376569037657
15,item4,2019-10-19 10:30:00,ST3,0.838745695410320"""
data_reduced = pd.read_csv(StringIO(data), parse_dates=["start"], index_col=0)
Run Code Online (Sandbox Code Playgroud)
我想生成一个图表,其中item_idx 轴为 ,startx 轴为日期。我想跟踪每个站的废品以及装配的组合。
import holoviews as hv
import bokeh
from holoviews import opts
hv.extension('bokeh')
bokeh.plotting.output_notebook()
def plot(data_reduced, x_axis="item_id"):
x_label …Run Code Online (Sandbox Code Playgroud)