私は探索したい大きなデータセットを持っています。しかし、私は複数のプロットを作成したくありません。私はちょうど私が対話的にx軸とy軸に使用されている列を変更することができる単一のプロットが必要なので、プロット自体が更新されます。プロットされる列を対話的に変更するBokeh
私はBokehを使ってPython/Bokehでこのスクリプトをブラウザに提供しようとしています。しかし、私はプロットを更新する方法を明確にしていません。基になるデータソースが変更された例がたくさんありますが、これをやりたくないのですが、どの列がプロットされているかを変更したいだけです。
ここでは、私が以下にしたいことを簡単に説明しました。これは、データソースのxとyの列を選択するための2つの '選択'ウィジェットを使用します。これらには、 'Line'グリフが参照している列を変更しようとするコールバックがあります。しかし、これは動作していないようです。アドバイスは大歓迎です。
import numpy as np
from bokeh.models import ColumnDataSource
from bokeh.plotting import Figure
from bokeh.models.widgets import Select,TextInput
from bokeh.models.glyphs import Line
from bokeh.models.layouts import HBox, VBox
from bokeh.io import curdoc
#==============================================================================
#%% Define some Data
#==============================================================================
N = 200
# Define the data to be used
x = np.linspace(0,4.*np.pi,N)
y = 3*np.cos(2*np.pi*x + np.pi*0.2)
z = 0.5*np.sin(2*np.pi*0.8*x + np.pi*0.4)
source = ColumnDataSource({'x':x,'cos':y,'sin':z})
#==============================================================================
#%% Layout
#==============================================================================
TOOLS = "box_select,lasso_select,help"
# create a new plot
plot = Figure(tools=TOOLS, title=None)
# Make a line and connect to data source
glyph = Line(x="x", y="cos", line_color="#F46D43", line_width=6, line_alpha=0.6)
plot.add_glyph(source, glyph)
# Add list boxes for selecting which columns to plot on the x and y axis
yaxis_select = Select(title="Y axis:", value="cos",
options=['x','cos','sin'])
xaxis_select = Select(title="X axis:", value="x",
options=['x','cos','sin'])
# Text input as a title
text = TextInput(title="title", value='my sine wave plotter')
# Layout widgets next to the plot
controls = VBox(text,yaxis_select,xaxis_select)
layout = HBox(controls,plot,width=800)
#==============================================================================
#%% Callbacks
#==============================================================================
# Put callbacks on the list boxes so that when they are changed the columns being
# plotted get changed.
def update_x_axis(attr, old, new):
# Change the column used for the x axis
glyph.x = xaxis_select.value
def update_y_axis(attr, old, new):
# Change the column used for the y axis
glyph.y = yaxis_select.value
yaxis_select.on_change('value', update_y_axis)
xaxis_select.on_change('value', update_x_axis)
#==============================================================================
#%% Add to document root
#==============================================================================
curdoc().add_root(layout)
curdoc().title = "Plotting app"
私は期待していたものの
残念ながら、私は、これらの特定のフィールドを編集するための、完全にPythonの解決策を得ることができなかったことを私は「wouldn Javascriptで手を汚す必要があります。可能であれば、私はPythonにとどまることを好むでしょう。しかしこれはうまくいくと思われ、私をロード・ブロックに乗せます。ありがとう。 – Redlegjed