2015-12-10 11 views
5

Ho un set di dati costituito da periodi di alcuni osservabili, e mi piacerebbe usare bokeh per osservare il diagramma di fase in diversi punti delle serie temporali. Quello che voglio sapere è come cambiare le proprietà dei glifi selezionati o non selezionati (in questo caso vorrei ridurre l'alfa dei punti non selezionati o cambiare il colore di quelli selezionati).Come impostare le proprietà dei glifi selezionati/non selezionati in bokeh

Il codice seguente crea l'interfaccia desiderata in un notebook ipython e si basa sull'esempio nello users guidehttp://bokeh.pydata.org/en/0.10.0/docs/user_guide/interaction.html#linked-brushing. Non riesco a trovare nessuna opzione ovvia da impostare e preferirei non dover imparare javascript per questa cosa.

import numpy as np 
from pandas import DataFrame 
from bokeh.plotting import figure, output_notebook, show, gridplot 
from bokeh.models import ColumnDataSource, widgets 

def znzt_ts():#, plot_antisym=False, **kwargs): 
    t = np.arange(1000) 
    Eu = np.sin(t * np.pi/10) + np.random.random(1000) 
    Ez = np.cos(t * np.pi/10) + np.random.random(1000) 
    ts = DataFrame({'t': t, 'Eu': Eu, 'Ez': Ez}) 
    tools = 'box_zoom,pan,reset,save,box_select' 
    source = ColumnDataSource(data=ts) 
    original_source = ColumnDataSource(data=ts) 

    p1 = figure(plot_width=300, plot_height=300, 
       tools=tools) 
    p2 = figure(plot_width=300, plot_height=300, tools=tools,) 
    p1.circle('t', 'Eu', source=source, size=1) 
    p2.circle('Eu', 'Ez', source=source, size=1) 
    return gridplot([[p1, p2]]) 

gp = znzt_ts() 
output_notebook() 
show(gp) 
+0

Hai già guardato questo? (Http://bokeh.pydata.org/en/0.9.3/docs/user_guide/styling.html) – Adam

risposta

3

Il link Adam postato nel suo commento vi mostra come fare questo: È necessario impostare la selection_glyph e nonselection_glyph del vostro cerchio renderer di glifi con le proprietà desiderate.

Nel manuale, è possibile accedere al modulo di rendering assegnando un nome alla chiamata p.circle(..., name="mycircle") e quindi utilizzando renderer = p.select(name="mycircle"). È anche possibile salvare il riferimento al renderer quando viene restituito dalla funzione p.circle(...): renderer = p.circle('t', 'Eu', source=source, line_color=None).

Una volta ottenuto il riferimento al renderer, è possibile assegnare i glifi:

renderer.selection_glyph = Circle(fill_color='firebrick', line_color=None) 
renderer.nonselection_glyph = Circle(fill_color='#1f77b4', fill_alpha=0.1, line_color=None) 

import numpy as np 
from pandas import DataFrame 
from bokeh.plotting import figure, output_notebook, show, gridplot 
from bokeh.models import ColumnDataSource, widgets 
from bokeh.models.glyphs import Circle 

def znzt_ts():#, plot_antisym=False, **kwargs): 
    t = np.arange(1000) 
    Eu = np.sin(t * np.pi/10) + np.random.random(1000) 
    Ez = np.cos(t * np.pi/10) + np.random.random(1000) 
    ts = DataFrame({'t': t, 'Eu': Eu, 'Ez': Ez}) 
    tools = 'box_zoom,pan,reset,save,box_select' 
    source = ColumnDataSource(data=ts) 
    original_source = ColumnDataSource(data=ts) 

    selection_glyph = Circle(fill_color='firebrick', line_color=None) 
    nonselection_glyph = Circle(fill_color='#1f77b4', fill_alpha=0.1, line_color=None) 

    p1 = figure(plot_width=300, plot_height=300, tools=tools) 
    r1 = p1.circle('t', 'Eu', source=source, line_color=None) 
    r1.selection_glyph = selection_glyph 
    r1.nonselection_glyph = nonselection_glyph 


    p2 = figure(plot_width=300, plot_height=300, tools=tools) 
    r2 = p2.circle('Eu', 'Ez', source=source, line_color=None) 
    r2.selection_glyph = selection_glyph 
    r2.nonselection_glyph = nonselection_glyph 
    return gridplot([[p1, p2]]) 

gp = znzt_ts() 
output_notebook() 
show(gp) 
0

Per rimuovere completamente i glifi non selezionati, è possibile utilizzare:

fig = Figure() 
c = fig.circle(x='x', y='y', source=source) 
c.nonselection_glyph.visible = False 
Problemi correlati