Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用bokeh单击按钮从文件加载图形数据_Javascript_Python_File_Plot_Bokeh - Fatal编程技术网

Javascript 使用bokeh单击按钮从文件加载图形数据

Javascript 使用bokeh单击按钮从文件加载图形数据,javascript,python,file,plot,bokeh,Javascript,Python,File,Plot,Bokeh,我正在尝试使用Bokeh中的切换按钮创建一个交互式网站,用户可以单击切换按钮来选择绘制哪些图形 按钮将从文本文件(包含两列x和y数据)加载数据。数据文件有两列,其中包含由空格分隔的x和y数据 选择切换按钮后,将打印相应的数据,取消选择切换按钮后,将删除打印 我目前无法将参数传递给回调事件,是否可能 from bokeh.io import vform from bokeh.models import CustomJS, ColumnDataSource from bokeh.models.wid

我正在尝试使用Bokeh中的切换按钮创建一个交互式网站,用户可以单击切换按钮来选择绘制哪些图形

按钮将从文本文件(包含两列x和y数据)加载数据。数据文件有两列,其中包含由空格分隔的x和y数据

选择切换按钮后,将打印相应的数据,取消选择切换按钮后,将删除打印

我目前无法将参数传递给回调事件,是否可能

from bokeh.io import vform
from bokeh.models import CustomJS, ColumnDataSource
from bokeh.models.widgets import Toggle
from bokeh.plotting import figure, output_file, show

output_file("load_data_buttons.html")

x = [0]
y = x

source = ColumnDataSource(data=dict(x=x, y=y))

plot = figure(plot_width=400, plot_height=400)
plot.line('x', 'y', source=source, line_width=3, line_alpha=0.6)

callback = CustomJS(args=filename,dict(source=source), code="""
        var data = source.get('data');
        console.log(filename)
        x = data['x']
        y = data['y']
        #load data stored in the file name and assign to x and y
        source.trigger('change');
    """)

toggle1 = Toggle(label="Load data file 1", type="success",callback=callback("data_file_1.txt"))
toggle2 = Toggle(label="Load data file 2", type="success",callback=callback("data_file_2.txt"))

layout = vform(toggle1, toggle2, plot)

show(layout)

您应该加载这两个文件并将数据保存到数据源对象中,下面是一个示例:

from bokeh.io import vplot
import pandas as pd
from bokeh.models import CustomJS, ColumnDataSource
from bokeh.models.widgets import Button
from bokeh.plotting import figure, output_file, show

output_file("load_data_buttons.html")

df1 = pd.read_csv("data_file_1.txt")
df2 = pd.read_csv("data_file_2.txt")

plot = figure(plot_width=400, plot_height=400)

source = ColumnDataSource(data=dict(x=[0, 1], y=[0, 1]))
source2 = ColumnDataSource(data=dict(x1=df1.x.values, y1=df1.y.values, 
                                    x2=df2.x.values, y2=df2.y.values))

plot.line('x', 'y', source=source, line_width=3, line_alpha=0.6)

callback = CustomJS(args=dict(source=source, source2=source2), code="""
        var data = source.get('data');
        var data2 = source2.get('data');
        data['x'] = data2['x' + cb_obj.get("name")];
        data['y'] = data2['y' + cb_obj.get("name")];
        source.trigger('change');
    """)

toggle1 = Button(label="Load data file 1", callback=callback, name="1")
toggle2 = Button(label="Load data file 2", callback=callback, name="2")

layout = vplot(toggle1, toggle2, plot)

show(layout)

谢谢你的回答,海瑞。这真的很好,唯一的问题是我有数百个数据文件,导致了很多mb的数据。我真的不想提前预装,因为这需要很长时间。你知道在点击按钮时加载数据的方法吗?然后你需要创建一个javascript函数来解析csv文件,下面是一个例子:非常感谢,这些答案的组合解决了我的问题。非常感谢。