链接中的散景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) 在Bokeh指南中,可以创建各种条形图的示例.http://bokeh.pydata.org/en/0.10.0/docs/user_guide/charts.html#id4
这段代码将创建一个:
from bokeh.charts import Bar, output_file, show
from bokeh.sampledata.autompg import autompg as df
p = Bar(df, 'cyl', values='mpg', title="Total MPG by CYL")
output_file("bar.html")
show(p)
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解决方案,那也可以.
我似乎在Bokeh回调中遇到了与Pandas代码有关的问题。
这是错误之前输出的一部分。我的数据框看起来很正常,我不确定为什么会不高兴
time temperature
0 2016-03-17 11:00:00 4.676
1 2016-03-17 11:30:00 4.633
2 2016-03-17 12:00:00 4.639
3 2016-03-17 12:30:00 4.603
4 2016-03-17 13:00:00 4.615
5 2016-03-17 13:30:00 4.650
6 2016-03-17 14:00:00 4.678
7 2016-03-17 14:30:00 4.698
8 2016-03-17 15:00:00 4.753
9 2016-03-17 15:30:00 4.847
ERROR:bokeh.server.protocol_handler:error handling message Message 'PATCH-DOC' (
revision 1): ValueError('window must be an integer',)
Run Code Online (Sandbox Code Playgroud)
这是我从flask embed示例更改的代码(此处链接):
def callback(attr, old, new):
df = pd.DataFrame.from_dict(source.data.copy())
print df[:10]
if new == 0:
data = df
else:
data = …Run Code Online (Sandbox Code Playgroud) 我有一个数据集,我想在 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) 我正在为 R使用rbokeh 包。我在集成到一个闪亮的应用程序中取得了一些不错的结果。我现在想集成一个功能,其中dateRangeInput现在将选择图表的日期范围(它是时间序列数据)。
##necessary packages
install.packages("shiny")
install.packages("devtools")
install.packages("dplyr")
library(devtools)
devtools::install_github("ramnathv/htmlwidgets")
devtools::install_github("bokeh/rbokeh")
library(rbokeh)
library(dplyr)
library(shiny)
#example data set
james<-mtcars[c("mpg")]
james$date<-seq(from=as.Date("2013-05-16"),to=as.Date("2013-06-16"),by="days")
james$index<-1:4
#shiny app
shiny_example <- function(chart_data = james){
date_minmax <- range(chart_data$date)
shinyApp(
ui=fluidPage(
titlePanel("a plot"),
sidebarLayout(
sidebarPanel(
textInput("index","Enter the index from 1 to 16",value=1),
uiOutput("date_range")
),
mainPanel(
rbokeh::rbokehOutput("plot_cars")
)
)
),
server=function(input,output,session)
{
current_data <- reactive({
current_df <- subset(james,index==input$index)
return(current_df)
})
output$date_range <- renderUI({
plot_data <- current_data()
current_id_range <- range(plot_data$date)
return(
dateRangeInput("date_range",
"Date Range(X Axis", …Run Code Online (Sandbox Code Playgroud) 我正在评估Bokeh是否已准备好进行更广泛的使用.我已经绘制了两列数据帧(最后的代码),"关闭"和"调整关闭".

我想放入复选框来切换图中两个折线图的显示.因此,如果未选中相关复选框,则不会显示该行.http://bokeh.pydata.org/en/latest/docs/user_guide/interaction.html上的Bokeh文档确实讨论了复选框组,但未提供明确的工作示例.感谢任何有助于获取数据框列的复选框的帮助.
import pandas as pd
from bokeh.plotting import figure, output_file, show
IBM = pd.read_csv(
"http://ichart.yahoo.com/table.csv?s=IBM&a=0&b=1&c=2011&d=0&e=1&f=2016",
parse_dates=['Date'])
output_file("datetime.html")
p = figure(width=500, height=250, x_axis_type="datetime")
p.line(IBM['Date'], IBM['Close'], color='navy', alpha=0.5)
p.line(IBM['Date'], IBM['Adj Close'], color='red', alpha=0.5)
show(p)
Run Code Online (Sandbox Code Playgroud) 我是django和bokeh的新手。我试图渲染一个简单的散景图,该图由几个选择选项支持,这些选项实际上使我可以在django Web应用程序中调整图的内容。
当从中获得的script和div元素bokeh.embed.components()作为上下文变量传递到模板时,将绘制图。当我在一个bokeh.io.vform对象中拥有一个小部件和一个图时,这是行不通的。
bokeh.io.show()通过指定bokeh.plotting.output_file(),在执行时我得到正确的输出,但是我试图在我的Web应用程序中运行它。我有什么想念的吗?还是有其他方法符合我的意图?
我的仅渲染bokeh小部件的代码如下:
views.py
#django imports
from bokeh.embed import components
from bokeh.plotting import figure
from bokeh.io import vform
from bokeh.models.widgets import Select
def test(request):
s = Select(title="test", value="a", options=['a','b','c'])
script,div = components(s)
return render(request,'test.html',RequestContext(request,{'script':script,'div':div}))
Run Code Online (Sandbox Code Playgroud)
test.html
<html>
<head>
<link href="http://cdn.bokeh.org/bokeh/release/bokeh-0.11.1.min.css" rel="stylesheet" type="text/css">
<script src="http://cdn.bokeh.org/bokeh/release/bokeh-0.11.1.min.js"></script>
</head>
{% load staticfiles %}
<body>
{{ div | safe }}
{{ script | safe }}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我希望从Django的test()启动test.html时会呈现一个选择表单元素。但不会发生。
我使用Bokeh包生成地图以显示模拟结果.输出是具有交互性的html格式的单独地图.各个地图需要交互性.
请参阅此链接以获取示例:
http://bokeh.pydata.org/en/0.10.0/docs/gallery/texas.html
模拟可以自动设置为运行多次,并为每次运行生成一个映射.这可能是100的地图.我希望能够将地图拼接在一起以创建电影 - 这不需要交互性.Bokeh具有通过浏览器创建PNG文件的功能,因此可以手动将每个地图保存为文件,并使用ffmpeg创建电影.但是,如果你需要为100个文件做这个,那么这不是一个真正的选择.目前没有办法通过Bokeh自动生成PNG文件,但我相信它会在某些时候添加.
所以我需要一个解决方法.我的想法是从他们存储在本地驱动器上的位置打开每个html文件,拍摄屏幕截图,裁剪图像以保留所需的部分并保存.但我还没有找到一个有效的解决方案.
裁剪图像很简单:
from PIL import Image
img = Image.open(file_name)
box = (1, 1, 1000, 1000)
area = img.crop(box)
area.save('saved_image', 'jpeg')
Run Code Online (Sandbox Code Playgroud)
我的问题是打开html文件并首先拍摄屏幕截图以提供上述代码.
为此我尝试了以下内容,但都需要URL而不是html文件.另外两个都使用Firefox不适合我,但我已经安装了chrome并适当地修改了代码.
如何在python中使用Selenium WebDriver进行部分截图?
http://www.idiotinside.com/2015/10/20/take-screenshot-selenium-python/
我的代码是:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('file_name')
driver.save_screenshot('image.png')
driver.quit()
Run Code Online (Sandbox Code Playgroud)
哪个回报:
{"code":-32603,"message":"Cannot navigate to invalid URL"}
Run Code Online (Sandbox Code Playgroud)
显然,文件名不是网址,因此很清楚.如果你把它传递给一个网站,它的工作正常.获取html加载和拍照的任何帮助将不胜感激!它不必涉及Selenium.