gpt4 book ai didi

python - bokeh - 使用 customJS 绘制不同的列

转载 作者:太空宇宙 更新时间:2023-11-03 13:09:45 25 4
gpt4 key购买 nike

我有一个多列的数据框。前两列是 x 和 y 坐标,其余列是 (x,y) 对的不同属性值。

import pandas as pd
import numpy as np
df = pd.DataFrame()
df['x'] = np.random.randint(1,1000,100)
df['y'] = np.random.randint(1,1000,100)
df['val1'] = np.random.randint(1,1000,100)
df['val2'] = np.random.randint(1,1000,100)
df['val3'] = np.random.randint(1,1000,100)

print df.head()

x y val1 val2 val3
0 337 794 449 969 933
1 19 563 592 677 886
2 512 467 664 160 16
3 36 112 91 230 910
4 972 572 336 879 860

在 Bokeh 中使用 customJS,我想通过提供下拉菜单来更改二维热图中的颜色值。

from bokeh.plotting import figure
from bokeh.models import ColumnDataSource
from bokeh.models import LinearColorMapper
from bokeh.palettes import RdYlBu11 as palette

p = figure()
source = ColumnDataSource(df)
color_mapper = LinearColorMapper(palette=palette)
p.patches('x', 'y', source=source,\
fill_color={'field': 'val1', 'transform':color_mapper})

show(p)

上述命令绘制了一个颜色图,其颜色由“val1”列确定。我想根据下拉菜单中选择的内容绘制不同的列(val1、val2 或 val3)。

我可以通过做在 Bokeh 中创建一个下拉小部件

 from bokeh.models.widgets import Select
select = Select(title="Option:", value="val1", options=["val1","val2","val3"])

但是,我不太确定如何使用所选值通过回调来更新绘图。

有人可以给我一个指导吗?

谢谢。

最佳答案

我在代码中包含了一个带有注释的示例。主要的重要步骤是编写每当小部件上的选定选项更改时执行的 javascript 代码。代码只需要重新分配哪些列设置为数据源的“y”列的值。

另一个问题是您的数据只是 x 和 y 点。补丁字形将需要一个不同的数据结构来定义补丁的边界。我相信有更好的方法在 Bokeh 中制作热图,应该有大量关于堆栈溢出和 Bokeh 文档的示例。

import pandas as pd
import numpy as np

from bokeh.io import show
from bokeh.layouts import widgetbox,row
from bokeh.models import ColumnDataSource, CustomJS

df = pd.DataFrame()
df['x'] = np.random.randint(1,1000,1000)
df['y'] = np.random.randint(1,1000,1000)
df['val1'] = np.random.randint(1,1000,1000)
df['val2'] = np.random.randint(1,1000,1000)
df['val3'] = np.random.randint(1,1000,1000)

from bokeh.plotting import figure
from bokeh.models import LinearColorMapper
from bokeh.palettes import RdYlBu11 as palette

p = figure(x_range=(0,1000),y_range=(0,1000))
source = ColumnDataSource(df)
source_orig = ColumnDataSource(df)
color_mapper = LinearColorMapper(palette=palette)
p.rect('x', 'y', source=source,width=4,height=4,
color={'field': 'val1', 'transform':color_mapper})

from bokeh.models.widgets import Select
select = Select(title="Option:", value="val1", options=["val1","val2","val3"])

callback = CustomJS(args={'source':source},code="""
// print the selectd value of the select widget -
// this is printed in the browser console.
// cb_obj is the callback object, in this case the select
// widget. cb_obj.value is the selected value.
console.log(' changed selected option', cb_obj.value);

// create a new variable for the data of the column data source
// this is linked to the plot
var data = source.data;

// allocate the selected column to the field for the y values
data['y'] = data[cb_obj.value];

// register the change - this is required to process the change in
// the y values
source.change.emit();
""")

# Add the callback to the select widget.
# This executes each time the selected option changes
select.callback = callback
show(row(p,select))

关于python - bokeh - 使用 customJS 绘制不同的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46281068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com