2016-02-05 4 views
2

Я хочу изменить диапазон осей x как часть обновления графика в jupyter.Установите x_axis_limit в живом графике Bokeh, встроенном в блокнот Jupyter

Моя функция обновления для построения временных рядов (строка является экземпляром multi_line):

def update_plot(meta, data, fig, line, window_length=3.0): 
    fs = meta["format"]["sample rate"] 
    data = np.asarray(data).transpose()[4:8] 
    x, y = dsp.time_series(data, fs) 
    x = np.tile(x, (y.shape[0], 1)) 
    line.data_source.data['xs'] = x.tolist() 
    line.data_source.data['ys'] = y.tolist() 
    if x.max() >= window_length: 
     fig.x_range = Range1d(x.max() - window_length, x.max()) 
    push_notebook() 

Однако, в то время как это обновляет сюжет с новыми данными, он фактически не устанавливают пределы оси х, как ожидается. Я пробовал How can I accomplish `set_xlim` or `set_ylim` in Bokeh? однако он фактически не обновляет мой сюжет. Один из вариантов - обрезать построенные данные, однако я хочу, чтобы все данные были доступны, если пользователь масштабируется.

ответ

2

Это заняло у меня немного времени, чтобы понять, как то, что вы делали, казалось разумным! (Я задал этот вопрос в списке рассылки, чтобы лучше понять).

делает его работы довольно прямо вперед, в короткие изменения

fig.x_range = Range1d(x.max() - window_length, x.max()) 
push_notebook() 

в

fig.x_range.start = x.max() - window_length 
fig.x_range.end = x.max() 
push_notebook() 

Вот полный рабочий пример:

from ipywidgets import interact 
import numpy as np 

from bokeh.io import push_notebook 
from bokeh.plotting import figure, show, output_notebook 

x = np.linspace(0, 2*np.pi, 2000) 
y = np.sin(x) 

output_notebook() 

p = figure(plot_height=300, plot_width=600, y_range=(-5,5)) 
p.line(x, y, color="#2222aa", line_width=3) 

def update(range_max=6): 
    p.x_range.end = range_max 
    push_notebook() 

show(p) 

interact(update, range_max=(1,10)) 

Ноутбук здесь: http://nbviewer.jupyter.org/github/birdsarah/bokeh-miscellany/blob/master/How%20can%20I%20accomplish%20%60set_xlim%60%20or%20%60set_ylim%60%20in%20Bokeh%3F.ipynb

Смежные вопросы