私はIsomapアルゴリズムの結果を表現したいと思います。しかし、私はまた、ユーザーが彼が保持したいコンポーネントの数を選択したい。 私はそのためにスライダオブジェクトを作成しますが、コールバック関数がJavascriptであることです。したがって、scikitを使ってデータを更新することはできません。 これは私のコードです、誰かがいくつかのアイデアを与えることができますか? は、一度に全体.data
辞書を更新するために、常により良いです、あなたは動的視覚化ボケ
import numpy as np
from bokeh.io import vform
from bokeh.models import CustomJS, ColumnDataSource
from bokeh.plotting import figure, output_file, show
from bokeh.models.widgets import Slider
from sklearn import manifold
output_file("test.html")
X = np.random.randn(1000,20)
Y = np.random.randn(1000,20)
X_isomap = manifold.Isomap(n_neighbors=10, n_components=2).fit_transform(X)
X1 = X_isomap[:,0]
X2 = X_isomap[:,1]
IsoSource = ColumnDataSource(data=dict(x=X1, y=X2,DATA=X))
plot1 = figure(plot_width=400, plot_height=400,tools = "pan,wheel_zoom,box_zoom,reset,resize")
plot1.circle('x', 'y',source=IsoSource,size=7, color="navy")
#sliderCompMDS = Slider(title="n_components MDS",value=2,start=2,end=20,step=1)
callback = CustomJS(args=dict(source=IsoSource),code="""
var data = source.get('data');
var f = cb_obj.get('value')
x = data['x']
y =data['y']
X = data['DATA']
donnees = manifold.Isomap(n_neighbors=10, n_components=f).fit_transform(X)
x = donnees[:,0]
y = donnees[:,1]
source.trigger('change');
""")
sliderCompIso = Slider(title="n_components Isomap",value=2,start=1,end=20,step=1,callback=callback)
layout = vform(sliderCompIso, plot1)
show(layout)
*ユーザーインタラクションから* python *コードをトリガーしたい場合は、Bokehサーバーアプリケーションを作成する必要があります。ご存じのように、 'CustomJS'コールバックはPythonではなくJavaScriptのみを実行できます。いくつかの例がここにあります:https://github.com/bokeh/bokeh/tree/master/examples/app(画像をクリックすると、アプリの実行中のバージョンに移動します)と、ここにたくさんのドキュメントがあります:http://bokeh.pydata.org/en/latest/docs/user_guide/server.html – bigreddot
リンクありがとうございました。 それは私の問題を解決するのを助けた –