2016-09-18 51 views
0
import numpy as np 
from bokeh.plotting import * 
from bokeh.models import ColumnDataSource 

准备数据

N = 300 
x = np.linspace(0,4*np.pi, N) 
y0 = np.sin(x) 
y1 = np.cos(x) 
output_notebook() 

#create a column data source for the plots to share 
source = ColumnDataSource(data = dict(x = x, y0 = y0, y1 = y1)) 

Tools = "pan, wheel_zoom, box_zoom, reset, save, box_select, lasso_select" 

创建一个新的阴谋,并添加渲染

left = figure(tools = Tools, plot_width = 350, plot_height = 350, title = 'sinx') 
left.circle(x, y0,source = source) 

创建另一个情节,并添加渲染

right = figure(tools = Tools, plot_width = 350, plot_height = 350 , title = 'cosx') 
right.circle(x, y1, source = source) 

将该子图放入网格图中并显示图

p = gridplot([[left, right]]) 
show(p) 

enter image description here背景虚化以神秘的方式表现

什么是错与罪图表。不知道为什么“背景虚化”的行为就像this.But如果我写个Y为双人或单引号/引号那么事情做工精细

left.circle(x, 'y0',source = source) 

right.circle(x, 'y1', source = source) 

把次要情节在gridplot并显示情节

p = gridplot([[left, right]]) 
show(p) 

enter image description here

事情我试图解决重新启动我的笔记本电脑的问题

1)。 (最简单的方法来解决问题)

2)生成输出到新窗口。

3)分别生成的图而不是网格图。

请帮我找出幕后的原因。

我做错了什么? 这是一个错误?

回答

0

如果你想配置多个字形从单一ColumnDataSource共享数据,那么你总是需要与名称配置的字形性质列与实际数据的文字,如你已经完成了。换句话说:

left.circle('x', 'y0',source = source) 

right.circle('x', 'y1', source = source) 

请注意,我也引用'x'以及。这是分享源代码时正确的做法。当您传递文字值(即实际列表或数组)时,为方便起见,字形函数.circle会自动合成列。但是它们使用基于属性的已定义名称,因此如果您在两个渲染器之间共享源,则第二次调用.circle将覆盖第一次调用.circle所做的列'y'列。这正是你所看到的。

你可以想象,这种行为是令人困惑的。因此,只要明确提供source参数,就有一个open GitHub issue专门和完全禁止传入数据文字。我可以保证在不久的将来会发生这种情况,所以如果您要共享源文件,您应该始终只通过列名(即字符串)。