首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在全息视图中访问bokeh (图)参数

在全息视图中访问bokeh (图)参数
EN

Stack Overflow用户
提问于 2019-02-25 12:00:52
回答 1查看 585关注 0票数 1

首先,为了使用全息视图的抽取运算,我坚持全息视图,但在调整全息视图中的bokeh输出时遇到了限制:

要在纯bokeh中实现“链接平移”,需要共享bokehs bokeh.plotting.figure.Figure对象(如

代码语言:javascript
复制
# create a new plot 
s1 = figure(plot_width=250, plot_height=250)

# create a new plot and share only one range 
s2 = figure(plot_width=250, plot_height=250, x_range=s1.x_range)

关于:guide/interaction/linking.html#userguide-interaction-linking的完整示例

如何访问和操作全息视图所创建的bokeh数字?

我想要实现直接在全息视图中的链接平移。这样做的原因是,在具有不同范围的地块中保留了互动性

我知道,全息视图选项axiswise=True完全可以自动调整不同的范围,但这似乎不能仅定义为单个轴(例如y轴),而在x轴上保持链接的平移交互作用。

我怎样才能做到这一点?非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-26 02:29:23

这个问题有几个不同的答案。让我们从您所要做的最直接的修复开始,即连接一个轴,而不是另一个轴。这很容易通过赋予维度不同的名称来实现,例如,只需将其中一个维度命名为默认的'x‘或’y‘以外的维度:

代码语言:javascript
复制
hv.Curve([1, 2, 3], 'x', 'y') + hv.Curve([1, 2, 3], 'x', 'y2')

准确地说,在这种情况下,轴的“标识”是由维度名称、标签和单位决定的。这使得表示相同数量的轴可以很容易地共享。如果你真的需要,你甚至可以给他们不同的名字/标签/单位,然后用xlabel/ylabel选项覆盖显示的标签。

现在,要回答更直截了当的答案,HoloViews在后台生成bokeh模型,然后将它们呈现到屏幕上。您可以定义钩子,它可以在呈现bokeh绘图表示之前修改它。我当然不会推荐这种方法,但您可以实现与以前的解决方案相同的功能,如:

代码语言:javascript
复制
ax_range = None
def hook(plot, element):
    global ax_range
    ax_range = plot.handles['x_range']

def hook2(plot, element):
    plot.state.x_range = ax_range

hv.Curve([1, 2, 3], 'x', 'y').opts(hooks=[hook]) + hv.Curve([1, 2, 3], 'x2', 'y').opts(hooks=[hook2], axiswise=True)

最后,我们可以使链接更加明确,如果您喜欢这种方法,我建议您提交一个问题来请求包含它。在HoloViews 1.11中引入了所谓的链接,我们可以很容易地添加如下所示的RangeLink

代码语言:javascript
复制
import param
from holoviews.plotting.links import Link

class RangeLink(Link):

    x_range = param.Boolean(default=True)
    y_range = param.Boolean(default=True)

    _requires_target = True

from holoviews.plotting.bokeh.callbacks import LinkCallback

class RangeLinkCallback(LinkCallback):

    def __init__(self, root_model, link, source_plot, target_plot):
        if link.x_range:
            target_plot.handles['x_range'] = source_plot.handles['x_range']    
            target_plot.state.x_range = source_plot.state.x_range
        if link.y_range:
            target_plot.handles['y_range'] = source_plot.handles['y_range']    
            target_plot.state.y_range = source_plot.state.y_range

RangeLink.register_callback('bokeh', RangeLinkCallback)

# Now we can use it to link the axes
curve = hv.Curve([1, 2, 3])
curve2 = hv.Curve([1, 2, 3])

RangeLink(curve, curve2, y_range=False)

curve + curve2.opts(axiswise=True)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54865757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档