我正在尝试在我的散景图中添加一个按钮,这样我就可以更改使用回调添加到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。如果您尝试运行此代码,则需要使用自己的Google地图API密钥。您可以获得一个here。
答案 0 :(得分:0)
另一个响应会更改一堆圆圈的fill_color
以引用列数据源中不同的列颜色(以便所有圆圈都可以拥有自己的颜色)通过更改field
属性。由于您尝试仅为Patch
设置一个颜色值,因此您可能希望设置value
而不是field
cb = CustomJS(args=dict(patch=patch), code ="""
patch.glyph.fill_color.value = 'blue';
""")
我想你可能需要trigger
,但我不这么认为。
patch
和line
字形是API中有点古怪的两个字形,因为它们并不像所有其他字形那样真正支持矢量化属性。
更新:也许一个完整的例子更清晰。另外,仅需要trigger
,至少从当前版本(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
窗口小部件会导致修补程序的颜色更新:
如果那不是你问的问题,那么我必须温和地提出这个问题并不清楚。