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

如何在Jupyter Notebook离线模式下更新Plotly图表?

解决Jupyter离线环境下Plotly+ipywidgets动态更新图表的问题

嘿,我看了你的代码,发现几个影响动态更新的关键点,咱们一步步来调整,让你的界面能正常响应下拉菜单的选择更新图表~

现有代码的核心问题

  • 你用了普通的dict来定义fig,但Plotly的动态更新需要用**FigureWidget**对象,它才支持update这类实时修改的方法
  • 离线模式下用iplot()渲染的是静态图表,没法后续动态更新,得直接用FigureWidget来展示
  • 当前的逻辑只处理了选择"2"的情况,而且重复选"2"会不断往data里加相同的trace,导致图表重复显示

修改后的可运行代码

import plotly.graph_objects as go
import ipywidgets as widgets
from IPython.display import display

# 初始化FigureWidget,这是支持动态更新的核心对象
fig = go.FigureWidget()

# 添加初始的High trace
fig.add_scatter(
    x=[1,2,3,4],
    y=[4,6,2,8],
    name="High",
    line=dict(color='#7F7F7F'),
    opacity=0.8
)

# 定义下拉菜单的回调函数
def update_chart(change):
    selected = change["new"]
    # 先检查Low trace是否已经存在
    has_low = any(trace.name == "Low" for trace in fig.data)
    
    if selected == "2":
        if not has_low:
            # 不存在的话添加Low trace
            fig.add_scatter(
                x=[1,2,3,4],
                y=[1,7,3,5],
                name="Low",
                line=dict(color='green'),
                opacity=0.8
            )
    else:
        if has_low:
            # 选择其他选项时移除Low trace
            fig.data = [trace for trace in fig.data if trace.name != "Low"]

# 创建下拉控件
drop = widgets.Dropdown(
    options=['1', '2', '3'],
    value='1',
    description='Number:',
    disabled=False,
)
# 绑定回调到value变化事件
drop.observe(update_chart, names="value")

# 显示控件和图表
display(drop)
display(fig)

关键改动说明

  • 用FigureWidget替代静态dict:这个对象是Plotly为Jupyter交互场景设计的,所有修改都会实时反映到界面上
  • 添加/移除trace的逻辑优化:每次切换选项时先检查目标trace是否存在,避免重复添加或误删
  • 不需要init_notebook_mode:FigureWidget在离线环境下可以直接正常显示,不需要额外初始化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:15:55