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

如何在同一标签页更新Plotly px.line生成的BTC价格折线图

解决Plotly图表更新时打开新标签页的问题

问题原因

每次调用fig.show()都会启动一个新的临时HTTP服务,并在浏览器中打开新标签页加载该服务的内容,因此循环中重复创建fig并调用show()会不断生成新标签。

解决方案:使用Plotly Dash实现同一标签页更新(推荐)

Dash是Plotly官方的交互式应用框架,专门用于构建动态更新的数据可视化页面,能在同一浏览器标签内实时刷新图表内容,完全匹配你的幻灯片式展示需求。

完整代码

import pandas as pd
import dash
from dash import dcc, html
from dash.dependencies import Input, Output

# 读取BTC价格数据
df = pd.read_csv('btc.csv')

# 初始化Dash应用
app = dash.Dash(__name__)

# 定义应用布局:包含折线图和定时器组件
app.layout = html.Div([
    dcc.Graph(id='btc-price-chart'),
    dcc.Interval(
        id='update-timer',
        interval=250,  # 0.25秒更新一次(与原代码时间间隔一致)
        n_intervals=0
    )
])

# 回调函数:根据定时器触发更新图表数据
@app.callback(
    Output('btc-price-chart', 'figure'),
    Input('update-timer', 'n_intervals')
)
def refresh_btc_chart(n):
    # 计算当前展示的数据区间(每次取60条,和原逻辑保持一致)
    current_start = n * 60
    if current_start >= 600:
        current_start = 540  # 避免超出数据范围,最后一次展示540-600区间
    
    part_df = df.iloc[current_start:current_start+60]
    
    # 生成折线图并返回
    fig = px.line(
        part_df,
        x='date_x',
        y='price_y',
        title=f'BTC Price (Interval {current_start//60 + 1})'
    )
    return fig

if __name__ == '__main__':
    app.run_server(debug=True)

替代方案:复用已有Figure对象(仅适用于交互式环境)

如果不想引入Dash,可以直接更新已有fig的数据和布局,但这种方式仅在Jupyter Notebook等支持实时渲染的交互式环境中有效,普通Python脚本无法自动刷新浏览器页面:

代码示例

import pandas as pd
import plotly.express as px
import time

df = pd.read_csv('btc.csv')

# 初始化初始图表
i = 0
part_df = df.iloc[i:i+60]
fig = px.line(part_df, x='date_x', y='price_y', title='BTC Price ..')
fig.show()

while i < 600:
    time.sleep(0.25)
    i += 60
    part_df = df.iloc[i:i+60]
    
    # 直接更新图表的数据源和标题
    fig.data[0].x = part_df['date_x']
    fig.data[0].y = part_df['price_y']
    fig.layout.title.text = f'BTC Price .. (Interval {i//60 + 1})'

注意:此方案在普通本地脚本运行时,浏览器页面不会自动同步更新,仅在Jupyter等交互式环境中能实时刷新图表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:20:53