2016-09-18 2 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 hereBokeh ведет себя загадочным образом

что-то не так с грехом графа. Не знаю, почему «Боке» ведет себя как this.But, если я пишу у это в двойной или одинарной кавычки/кавычки, то все работает нормально

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 перезапишет столбец 'y', чтобы первый звонок был сделан .circle. Это именно то, что вы видите.

Как вы можете себе представить, такое поведение сбивает с толку. Соответственно, существует open GitHub issue, чтобы конкретно и полностью запретить передачу данных литералами всякий раз, когда аргумент source предоставляется явно.Я могу гарантировать, что это произойдет в ближайшем будущем, поэтому, если вы делитесь источником, вы всегда должны и только передавать в именах столбцов (т. Е. Строки).