You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Panel中如何将Tabulator选中行的值动态传递至绘图函数?

解决方案:用Panel响应式变量实现Tabulator选中行与图表的联动

核心思路

用Panel的响应式变量存储选中行的TIC_ID和modes,再让绘图函数监听这些变量的变化,实现动态更新图表。

修改后的完整代码

import pandas as pd
import panel as pn
import hvplot.pandas  # 需导入hvplot才能生成图表
pn.extension('tabulator')

# 模拟示例数据(替换为你的实际df_parameters_short)
df_parameters_short = pd.DataFrame({
    'TIC_ID': ['TIC_123', 'TIC_456', 'TIC_789'],
    'modes': ['mode_a', 'mode_b', 'mode_c'],
    'other_cols': ['foo', 'bar', 'baz']
})

# 1. 创建响应式变量,存储选中参数(设为不可见,仅用于传递数据)
selected_tic_id = pn.widgets.TextInput(value=df_parameters_short.iloc[0]['TIC_ID'], visible=False)
selected_mode = pn.widgets.TextInput(value=df_parameters_short.iloc[0]['modes'], visible=False)

def click(event):
    # 2. 点击行时更新响应式变量的值
    selected_tic_id.value = df_parameters_short.iloc[event.row]['TIC_ID']
    selected_mode.value = df_parameters_short.iloc[event.row]['modes']

def show_dataframe(base_dataframe):
    selectable_table = pn.widgets.Tabulator(
        base_dataframe,
        disabled=True,
        selection=[0],
        selectable=1,
        pagination='remote',
        page_size=20,
        show_index=False
    )
    selectable_table.on_click(click)
    return selectable_table

# 3. 用@pn.depends让绘图函数监听响应式变量的变化
@pn.depends(selected_tic_id.param.value, selected_mode.param.value)
def plotter(tic_id, mode):
    # 替换为你的实际数据路径
    path = './data/'
    try:
        df = pd.read_csv(f"{path}{tic_id}/{mode}/results.csv")
        fig = df.hvplot.scatter(x='phase', y='flux', title=f"{tic_id} - {mode}")
        return fig
    except FileNotFoundError:
        return pn.pane.Markdown(f"⚠️ 未找到文件:{path}{tic_id}/{mode}/results.csv")

# 4. 组装仪表盘组件
table = show_dataframe(df_parameters_short)
plot_panel = pn.panel(plotter)

# 并排展示表格与图表
dashboard = pn.Row(table, plot_panel)
dashboard.servable()

关键说明

  • 响应式变量:selected_tic_id和selected_mode作为数据传递的“桥梁”,它们的value属性是响应式的——值一旦更新,所有依赖它们的函数会自动重新执行。
  • @pn.depends装饰器:明确告知Panel,plotter函数的输入依赖于这两个变量,变量变化时自动触发函数重新生成图表。
  • 异常处理:加入文件不存在的提示,避免程序崩溃,提升交互友好性。

之前尝试失败的原因

你之前的click函数仅将选中值存在局部变量中,这些变量无法被plotter感知。用Panel响应式变量相当于把值放在全局可监听的容器里,让两个函数能通过这个容器实现数据联动。

内容的提问来源于stack exchange,提问作者szilac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:10:26