散景表现得很神秘

时间:2016-09-18 09:36:25

标签: python python-3.x debugging data-visualization bokeh

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)

将子图放在gridplot中并显示图

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

enter image description here

sin图有问题。不知道为什么'Bokeh'表现得像这样。但是如果我把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)生成的图分别代替网格图。

请帮助我找出幕后的原因。

我做错了吗? 这是一个错误吗?

1 个答案:

答案 0 :(得分:0)

如果要配置多个字形以共享单个ColumnDataSource中的数据,则始终需要使用列的名称配置字形属性,并 < em> not 与实际数据文字一样,正如您所做的那样。换句话说:

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

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

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

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