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

如何更新Scatter Mapbox中的标记位置?标记未同步问题求助

解决Mapbox散点图标记点不更新问题

问题根源在于全局DataFrame的原地修改,以及animate=True与Mapbox散点图的更新机制冲突。以下是修复后的代码:

import plotly.express as px
from dash import Dash, html, dcc
from dash.dependencies import Input, Output

px.set_mapbox_access_token(open(".mapbox_token").read())
# 保存原始数据副本,避免回调间修改全局状态
original_df = px.data.carshare()

app = Dash(__name__)

app.layout = html.Div([
    # 移除animate=True,Mapbox散点图不支持该自动动画机制
    dcc.Graph(id='map'),
    dcc.Interval(
        id='interval-component',
        interval=3000,
    )
])


@app.callback(Output('map', 'figure'), [Input('interval-component', 'n_intervals')])
def update_map(n):
    # 每次回调基于原始数据创建新的DataFrame,避免状态累积
    df = original_df.copy()
    df['centroid_lon'] += 0.01 * n  # 按回调次数累加,实现持续移动
    fig = px.scatter_mapbox(
        df, 
        lat="centroid_lat", 
        lon="centroid_lon",
        zoom=10  # 固定缩放级别,避免地图每次更新跳变
    )
    # 固定地图中心,让标记点在视野内移动
    fig.update_layout(mapbox_center={"lat": df['centroid_lat'].mean(), "lon": df['centroid_lon'].mean()})
    return fig


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

关键修改说明:

  • 避免全局数据污染:保存original_df作为原始数据模板,每次回调创建副本修改,防止回调间的状态互相影响。
  • 移除自动动画设置:Mapbox散点图不支持Dash的animate=True自动过渡机制,直接返回新figure即可实现标记点的实时更新。
  • 优化地图视角:通过zoom和mapbox_center固定地图缩放与中心,避免每次更新时地图自动偏移,提升视觉连贯性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:40:24