J'ai fait quelques essais avec Bokeh, et maintenant je veux rechercher un mot et changer la couleur de son glyphe. Mon code ressemble à ça :
import bokeh.plotting as bp
from bokeh.models import HoverTool, CustomJS
from bokeh.models.widgets import TextInput
from bokeh.io import vform
words = ["werner", "herbert", "klaus"]
x=[1,2,3]
y=[1,2,3]
color = ['green', 'blue', 'red']
word_input= TextInput(value="word", title="Point out a word")
source = bp.ColumnDataSource(data= dict(x=x,y=y,words=words, color='color'))
hover= HoverTool(tooltips=[("word", "@words")])
# output to static HTML file (with CDN resources)
bp.output_file("plot.html", mode="cdn")
# create a new plot with the tools above, and explicit ranges
p = bp.figure(plot_height = 600, plot_width = 800, title="word2vec", tools=[hover], logo =None)
# add a circle renderer with vectorized colors and sizes
p.circle('x','y', radius= 0.1, color = color, source=source, line_color=None)
callback= CustomJS(args=dict(source=source), code ="""
var data = source.get('data');
var glyph = cb_obj.get('value')
words = data['words']
colors=data['color']
for (i=0; i< words.length;i++){
if(glyph==words[i]){colors[i]='yellow'}
}
source.trigger('change');
""")
layout = vform(word_input, p)
# show the results
bp.show(layout)
Ce code ne fonctionne pas, et je n'arrive pas à comprendre pourquoi.
Qu'est-ce que je fais de mal ? J'ai posté une autre question plus tôt ce jour-là et c'est une sorte de première étape pour le résoudre.