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

Plotly Scattergeo绘制大量节点连线卡顿的优化方案咨询

优化Plotly Scattergeo绘制大量节点对连线的性能

你循环创建上千个Scattergeo trace是性能瓶颈——每个trace都是独立的渲染对象,数量过多会导致浏览器渲染引擎负载剧增,进而出现交互卡顿。Plotly支持用NaN分隔同一trace内的不同连线,这是解决这类批量连线绘制问题的标准方案,能大幅减少trace数量,提升渲染和交互性能。

核心实现思路

将所有节点对的起点、终点坐标按顺序拼接成两个大数组,每完成一组节点对的坐标添加后,插入一个NaN值。Plotly遇到NaN时会自动断开当前连线,后续坐标会作为新的独立连线渲染,最终只需要一个trace就能完成所有指定节点对的绘制。

优化后代码示例

import plotly.graph_objects as go
import pandas as pd
import numpy as np

# 替换为你的真实DataFrame
df = pd.DataFrame({
    "col1": [(39.9042, 116.4074), (31.2304, 121.4737), ...],  # 你的起点经纬度
    "col2": [(23.1291, 113.2644), (30.2741, 120.1551), ...]   # 你的终点经纬度
})

# 初始化存储所有坐标的数组
lats = []
lons = []

for _, row in df.iterrows():
    # 添加当前节点对的起点坐标
    lats.append(row["col1"][0])
    lons.append(row["col1"][1])
    # 添加当前节点对的终点坐标
    lats.append(row["col2"][0])
    lons.append(row["col2"][1])
    # 插入NaN分隔不同连线
    lats.append(np.nan)
    lons.append(np.nan)

# 移除最后一组多余的NaN(可选,不影响渲染结果)
lats = lats[:-1]
lons = lons[:-1]

# 用单个trace绘制所有连线
fig = go.Figure(go.Scattergeo(
    mode="markers+lines",
    lat=lats,
    lon=lons,
    marker={"size": 10}
))

fig.show()

额外优化建议

  • 若无需显示所有标记点,可将mode改为"lines",减少需要渲染的元素数量,进一步提升性能
  • 如果需要区分不同连线的样式(如颜色、粗细),可将同样式的节点对分组到同一个trace中,避免创建过多trace
  • 适当减小marker的size值,降低渲染负载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:45:36