蟒蛇散景;使用GMapPlot上的CustomJS回调更改补丁颜色

时间:2017-01-04 03:48:17

标签: javascript python callback 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。如果您尝试运行此代码,则需要使用自己的Google地图API密钥。您可以获得一个here

1 个答案:

答案 0 :(得分:0)

另一个响应会更改一堆圆圈的fill_color以引用列数据源中不同的颜色(以便所有圆圈都可以拥有自己的颜色)通过更改field属性。由于您尝试仅为Patch设置一个颜色值,因此您可能希望设置value而不是field

cb = CustomJS(args=dict(patch=patch), code ="""
    patch.glyph.fill_color.value = 'blue';
""")

我想你可能需要trigger,但我不这么认为。

patchline字形是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窗口小部件会导致修补程序的颜色更新:

enter image description here

如果那不是你问的问题,那么我必须温和地提出这个问题并不清楚。