【问题标题】:python bokeh; change Patch colours with CustomJS callback on GMapPlot蟒蛇散景;在 GMapPlot 上使用 CustomJS 回调更改补丁颜色
【发布时间】:2017-01-04 03:48:16
【问题描述】:

我正在尝试向我的散景图添加一个按钮,该按钮允许我更改使用回调添加到 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 maps API 密钥。你可以得到一个here

【问题讨论】:

    标签: javascript python callback bokeh


    【解决方案1】:

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

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

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

    patchline 字形是 API 中有点古怪的两个字形,因为它们不像所有其他字形那样真正支持矢量化属性。


    更新:也许一个完整的例子更清楚。仅供参考,至少在当前版本(0.12.4)中需要trigger

    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 小部件会导致补丁的颜色更新:

    如果这不是您要问的,那么我必须温和地暗示问题不明确。

    【讨论】:

    • 感谢您的回复。我想我可能在提出问题之前稍微简化了我的问题,因为我实际上确实希望能够以编程方式控制颜色变化。我是否需要将颜色列表添加到 ColumnDataSource?另外,如果我有多个补丁,我将如何通过回调将它们全部更改?
    • 我不确定我是否理解。我展示了如何以编程方式更改它,在您可以附加的 CustomJS 回调中,例如到散景Button。我唯一的评论是patch 只绘制一个补丁,这就是为什么你要设置value 而不是field,而circle 之类的东西可以一次绘制很多圆圈。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 2023-03-18
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    相关资源
    最近更新 更多