0

预期行为和观察到的行为的描述

我们正在尝试使用 Panel RangeSlider 来更新 hvplot 动态地图的 x 范围。当我们有一个图时,我们的代码可以正常工作 - 更改范围滑块的边界会更改链接图的边界。但是,当我们在现有绘图上覆盖另一条曲线时,RangeSlider 和绘图边界之间的链接会中断。下面附加的代码是我们用例的一个更简单的版本,它包含数百万个点。因此,为了性能,我们不能使用 Bokeh RangeToolLink 或使用 shared_axes = True。我们将非常感谢有关如何在 Panel RangeSlider 和覆盖的 hvplot 之间成功构建 JavaScript 链接的建议。

重现问题的完整、最小、独立的示例代码

import panel as pn
import numpy as np
import pandas as pd
import hvplot.pandas

from holoviews import opts

# button callback when clicked - overlays a line onto existing plot
def overlay_plot(event):
    global plot1

    overlay = data.hvplot.line(x = 'x', y = 'y2', width = 900, height = 360)
    overlay_plot = plot1 * overlay
    main_page.__setitem__(2, overlay_plot)

# range slider creation
x_slider = pn.widgets.RangeSlider(title='X-Axis Scale', start=0, 
    end=10, step=0.1, value=(0, 10), show_value=False)

#define data and plotting figure
x = np.linspace(0, 10, 1000)
data = pd.DataFrame({'x': x, 'y': np.sin(x), 'y2': np.cos(x)})
plot1 = data.hvplot.line(x = 'x', y = 'y', width = 900, height = 360)

# javascript code for callback
code = """
x_range.start = source.value[0]
x_range.end = source.value[1]
"""

# button to call for an overlay event
new_plot_btn = pn.widgets.Button(name='Overlay', button_type='primary', disabled=False)
new_plot_btn.on_click(overlay_plot)

# javascript link to js code to link the range slider to the existing pot to update x range bounds
x_slider.jslink(plot1, code={'value_throttled': code})
main_page = pn.Column(new_plot_btn, x_slider, plot1)
main_page.servable()

所有软件版本信息

  • 视窗操作系统
  • 谷歌浏览器
  • 散景 - 2.3.2
  • 面板 0.11.3
  • numpy 1.20.3
  • 熊猫 1.2.3
  • 高压图 0.7.1
  • 全息视图 1.14.3
4

0 回答 0