2015-08-31 23 views
5

Bokeh hakkında güzel bir şey, geri dönüşlerin, bokeh-sunucusuna gerek kalmadan javascript düzeyindeki eylemlerle sonuçlanan Python katmanından belirtilebilmesidir. Böylece, çalışan bir Ipython veya Bokeh sunucusu olmadan bir tarayıcıda çalışan etkileşimli widget'lar oluşturabilirsiniz.Bokeh: Geçişler, Widgets for CustomJS'ye aittir

The 0.9.3. http://bokeh.pydata.org/en/latest/docs/user_guide/interaction.html#cutomjs-for-widgets

from bokeh.io import vform 
from bokeh.models import CustomJS, ColumnDataSource, Slider 
from bokeh.plotting import figure, output_file, show 

output_file("callback.html") 
x = [x*0.005 for x in range(0, 200)] 
y = x 

source = ColumnDataSource(data=dict(x=x, y=y)) 

plot = figure(plot_width=400, plot_height=400) 
plot.line('x', 'y', source=source, line_width=3, line_alpha=0.6) 

callback = CustomJS(args=dict(source=source), code=""" 
     var data = source.get('data'); 
     var f = cb_obj.get('value') 
     x = data['x'] 
     y = data['y'] 
     for (i = 0; i < x.length; i++) { 
      y[i] = Math.pow(x[i], f) 
     } 
     source.trigger('change'); 
    """) 

slider = Slider(start=0.1, end=4, value=1, step=.1, title="power", callback=callback) 

layout = vform(slider, plot) 
show(layout) 

Bazı basit bir çevrimiçi atamaları oluşturmak için böyle bir kod uyarlamak istiyorum: dokümantasyon Bir ipython defterine üretebilir bir örnek verir. Benim sorum, bir kaydırıcıyı çağırmadan doğrudan python'dan javascript'e diğer değişkenleri nasıl geçirebilirim. Örneğin varsayalım ben JavaScript olmak istiyorum: A (örneğin, A = 10) üzerinde bir ipython kodu hücrede tanımlandı

y[i] = Math.pow(x[i], A*f) 

. Javascript'te 'var A = 10' tanımlamak için yeterince kolay ama python'da A ve diğer değişkenlerin değerini ayarlamak ve daha sonra bu javascript'e aktarmak istiyorum. Bir yolu var mı?

cevap

5

Bokeh 0.9.3'ten itibaren, yalnızca "Bokeh Modelleri" ni (örneğin veri kaynakları ve oluşturucular gibi şeyleri), rastgele python nesnelerini geçemezsiniz. Ancak, bokeh belgelerin kolayca yansıtılabilen basit bir ad alanı konsepti ile genişletilmesi üzerinde çalışıyoruz.

+0

Teşekkürler, bu harika olurdu. Bokeh sunucusu ile birkaç temel etkileşimli görselleştirmeler oluşturdum ve Ipython'daki ipywidgets kitaplığından etkileşimde bulunun (not [Bokeh belgeleri] (http://bokeh.pydata.org/en/latest/docs/user_guide/notebook.html#id5)) artık kullanımdan kaldırılmış Ipython.html.widgets kitaplığını ifade eder, dolayısıyla ipywidgets olarak değiştirilmelidir). Ancak, yukarıdaki problemi çözebilirse, python/Bokeh yüklü olmayan kişiler için etkileşimli içeriği oluşturmak ve değiştirmek kolaylaşır. Bu, disiplinlerin çoğunda öğretim * kurabiliyor. – JHuw