Bokeh

2015-12-08 28 views
5

'da kutu seçim aracı içinde bulunan seçili verileri al. Bokehde bir dağılım grafiği varsa ve Kutu Seçme Aracı'nı etkinleştirdiysem, Kutu Seçme Aracı ile birkaç nokta seçtiğimi varsayalım. Seçtiğim noktaların (x, y) konum konum bilgilerine nasıl erişebilirim?Bokeh

%matplotlib inline 
import numpy as np 
from random import choice 
from string import ascii_lowercase 

from bokeh.models.tools import * 
from bokeh.plotting import * 

output_notebook() 


TOOLS="pan,wheel_zoom,reset,hover,poly_select,box_select" 
p = figure(title = "My chart", tools=TOOLS) 
p.xaxis.axis_label = 'X' 
p.yaxis.axis_label = 'Y' 

source = ColumnDataSource(
    data=dict(
     xvals=list(range(0, 10)), 
     yvals=list(np.random.normal(0, 1, 10)), 
     letters = [choice(ascii_lowercase) for _ in range(10)] 
    ) 
) 
p.scatter("xvals", "yvals",source=source,fill_alpha=0.2, size=5) 

select_tool = p.select(dict(type=BoxSelectTool))[0] 

show(p) 

# How can I know which points are contained in the Box Select Tool? 

I "geri" özelliğini ve "ölçüleri" özelliğini çağrı değil sadece bir liste [ "genişlik", "yükseklik"] döndürür. Boyutları ve Seçili Kutunun yerini bulabilirsem, veri kümemde hangi noktaların oradan olduğunu anlayabilirim.

cevap

9

Seçilen verinin endeksleri ile bir Python değişkeni günceller ColumnDataSource üzerinde callback kullanabilirsiniz:

%matplotlib inline 
import numpy as np 
from random import choice 
from string import ascii_lowercase 

from bokeh.models.tools import * 
from bokeh.plotting import * 
from bokeh.models import CustomJS 



output_notebook() 


TOOLS="pan,wheel_zoom,reset,hover,poly_select,box_select" 
p = figure(title = "My chart", tools=TOOLS) 
p.xaxis.axis_label = 'X' 
p.yaxis.axis_label = 'Y' 

source = ColumnDataSource(
    data=dict(
     xvals=list(range(0, 10)), 
     yvals=list(np.random.normal(0, 1, 10)), 
     letters = [choice(ascii_lowercase) for _ in range(10)] 
    ) 
) 
p.scatter("xvals", "yvals",source=source,fill_alpha=0.2, size=5) 

select_tool = p.select(dict(type=BoxSelectTool))[0] 

source.callback = CustomJS(args=dict(p=p), code=""" 
     var inds = cb_obj.get('selected')['1d'].indices; 
     var d1 = cb_obj.get('data'); 
     console.log(d1) 
     var kernel = IPython.notebook.kernel; 
     IPython.notebook.kernel.execute("inds = " + inds); 
     """ 
) 

show(p) 

Sonra istenilen verilere erişebilir

zip([source.data['xvals'][i] for i in inds], 
    [source.data['yvals'][i] for i in inds]) 
+0

Müthiş gibi bir şey kullanarak nitelikleri ! CustomJS'yi "Geri Arama" olarak değiştirdim (hala 0.9.0 sürümüne sahiptim). Yardımlarınız için teşekkürler, gerçekten yararlı. –

+1

@FrankFineis: Sevindim yardımcı olur! "Cevapsız" listesinden (ve bana bazı internet puanları vermek için = =) ') (yanıtı tıklayarak üçgeni tıklayarak) çekin ve cevabı kabul edin (onay işaretini tıklayarak). – Jake

İlgili konular