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

plotly.express scatter_geo多数据集绘制与子图创建问题咨询

Plotly scatter_geo 叠加图层与子图实现方案

Plotly Express 生成的是标准 Plotly Figure 对象,支持原生图层追加与子图布局,无需套用 matplotlib 的绘图逻辑,具体实现方法如下:

叠加地面站图层(不覆盖原有卫星数据)

直接在已生成的卫星图对象上追加 trace 即可,不要在原 px.scatter_geo 调用中传入 location 参数,避免覆盖原有数据映射。

  1. 先整理地面站坐标数据,替换为实际值即可:
import pandas as pd
# 地面站示例数据
ground_stations = pd.DataFrame({
    'station_name': ['站点1', '站点2', '站点3'],
    'latitude': [39.90, 18.25, 39.47],
    'longitude': [116.40, 109.51, 75.99]
})
  1. 调用 add_trace 追加地面站图层,注意添加frame='all'配置,保证动画播放时地面站不会消失:
import plotly.graph_objects as go

fig.add_trace(
    go.Scattergeo(
        lat=ground_stations['latitude'],
        lon=ground_stations['longitude'],
        mode='markers+text',
        marker=dict(size=14, color='#ff2d55', symbol='triangle-up'),
        text=ground_stations['station_name'],
        textposition='bottom right',
        name='地面观测站',
        frame='all' # 核心配置:静态图层在所有动画帧常驻
    )
)

如果需要绘制地面站的观测覆盖范围,用同样方法追加go.Scattergeo绘制闭合经纬度轨迹即可。

创建多子图布局

子图需要通过plotly.subplots.make_subplots提前声明geo类型的子图槽位,再将px生成的卫星轨迹、自定义地面站轨迹分别分配到对应子图,示例代码:

from plotly.subplots import make_subplots

# 初始化1行2列的子图,两个子图均为地理坐标类型
fig = make_subplots(
    rows=1,
    cols=2,
    specs=[[{"type": "scattergeo"}, {"type": "scattergeo"}]]
)

# 生成原有的卫星动态轨迹图
sat_fig = px.scatter_geo(
    prop_data['2022-06-06':'2022-06-06'],
    animation_frame='hour',
    color='visible',
    lat='latitude',
    lon='longitude',
    opacity=0.3,
    hover_data=['elevation', 'azimuth']
)

# 将卫星轨迹和动画帧同步到子图
for trace in sat_fig.data:
    fig.add_trace(trace, row=1, col=1)
fig.frames = sat_fig.frames
fig.layout.update(sat_fig.layout)

# 给两个子图都添加地面站图层
for col_idx in [1, 2]:
    fig.add_trace(
        go.Scattergeo(
            lat=ground_stations['latitude'],
            lon=ground_stations['longitude'],
            mode='markers',
            marker=dict(size=14, color='#ff2d55', symbol='triangle-up'),
            name='地面观测站',
            frame='all'
        ),
        row=1,
        col=col_idx
    )

# 分别配置两个子图的投影方式
fig.update_geos(projection_type="orthographic", row=1, col=1)
fig.update_geos(projection_type="equirectangular", row=1, col=2)

fig.show()

关键注意点

  • 不要在同一个px.scatter_geo调用中混合传入卫星与地面站数据,会打乱动画帧逻辑与颜色映射规则。
  • 追加静态常驻图层必须配置frame='all',否则动画播放时静态图层会被帧数据覆盖。
  • 使用子图布局时,投影参数不要在px调用中设置,通过update_geos针对每个子图单独配置即可。

原有代码运行生成的卫星轨迹效果:
带可见性标识的卫星轨迹图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:01:25