我正在尝试向我的 Bokeh 图添加一个按钮,该按钮允许我更改使用回调添加到 GMapPlot 的补丁字形上使用的颜色。
目前我拥有的是:
from bokeh.io import output_file, show
from bokeh.models import GMapPlot, GMapOptions, ColumnDataSource, DataRange1d, Patch
map_options = GMapOptions(lat=-41.281909, lng=174.775993, zoom=13)
p = GMapPlot(x_range=DataRange1d(), y_range=DataRange1d(), map_options=map_options, api_key=API_KEY)
lats = [-41.281909, -41.281044, -41.294968]
longs = [174.775993, 174.761222, 174.764916]
source = ColumnDataSource(data=dict(lats=lats, longs=longs))
patch = Patch(x='longs', y='lats', fill_color='red', fill_alpha=0.2)
p.add_glyph(source, patch)
output_file('gmapplot.html')
show(p)
我希望能够使用按钮通过回调来编辑 fill_color。我尝试挪用this response但一直没能让它发挥作用。
任何帮助将不胜感激。
PS。如果您尝试运行此代码,您将需要使用您自己的谷歌地图 API key 。您可以获得一个here .最佳答案
另一个响应更改了一堆圆圈的 fill_color
以引用列数据源中不同的列颜色(以便所有圆圈都可以有自己的颜色)自己的颜色)通过更改 field
属性。由于您尝试为一次 Patch
设置单个颜色值,因此您可能需要设置 value
而不是 field
cb = CustomJS(args=dict(patch=patch), code ="""
patch.glyph.fill_color.value = 'blue';
""")
我想您可能需要一个触发器
,但我不这么认为。
patch
和 line
字形是 API 中有点奇怪的两个字形,因为它们并不像所有其他字形那样真正支持矢量化属性。
更新:也许完整的示例更清楚。另外仅供引用,至少从当前版本 (0.12.4
) 开始,需要触发器
。
from bokeh.io import output_file, show
from bokeh.layouts import column
from bokeh.models import CustomJS, Select
from bokeh.plotting import figure
plot = figure()
r = plot.patch(x=[1, 2, 3, 4], y=[1, 2, 2, 1],
fill_color="firebrick", fill_alpha=0.6, line_color="black")
select = Select(title="Select colors", value="firebrick",
options = ["firebrick","navy", "olive"])
callback = CustomJS(args=dict(renderer=r, select=select), code ="""
renderer.glyph.fill_color.value = select.value;
renderer.trigger('change')
""")
select.callback = callback
output_file("foo.html")
show(column(select, plot))
补丁开始时是红色的。更改 UI 中的 Select
小部件会导致补丁的颜色更新:
如果这不是您要问的,那么我必须温和地表明问题不清楚。
关于javascript - python Bokeh ;使用 GMapPlot 上的 CustomJS 回调更改补丁颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41455881/