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

Plotly世界地图绘制散点图问题:Jupyter Notebook中无散点显示

嘿,我之前也碰到过一模一样的问题!只显示地图却看不到散点,大概率是数据格式、字段匹配或者Plotly的地理散点配置出了问题。咱们一步步来排查和解决:

可能的问题及修复方案

1. 用错了散点类型:必须用scattergeo而非普通scatter

如果你的代码里用的是go.Scatter(),那肯定不会在地图上显示点——普通散点是基于笛卡尔坐标系的,而地图需要适配地理坐标系的go.Scattergeo()。这是最常见的坑!

给你个修正后的示例代码,直接就能跑:

import plotly.graph_objects as go

# 模拟你的数据结构
data_points = [
    {"city": "Beijing", "lat": 39.9042, "lon": 116.4074, "value": 100},
    {"city": "New York", "lat": 40.7128, "lon": -74.0060, "value": 80},
    {"city": "London", "lat": 51.5074, "lon": -0.1278, "value": 120}
]

fig = go.Figure()

# 关键:用Scattergeo而不是Scatter
fig.add_trace(go.Scattergeo(
    lat=[point["lat"] for point in data_points],
    lon=[point["lon"] for point in data_points],
    text=[point["city"] for point in data_points],  # 鼠标悬停显示的文本
    mode='markers',  # 必须指定模式为markers才会显示点
    marker=dict(
        size=10,  # 标记别太小,不然容易被忽略
        color='crimson',  # 选个鲜艳的颜色,避免和地图背景融合
        opacity=0.8
    )
))

# 优化地图显示效果
fig.update_layout(
    geo=dict(
        showland=True,
        landcolor="lightgray",
        projection_type="natural earth"  # 用自然地球投影,显示更直观
    ),
    title="World Map with Scatter Points"
)

fig.show()

2. 经纬度字段名不匹配或数据类型错误

  • 确保你传给lat和lon的是数值型数据,如果是字符串格式,得先转成数值:比如用pd.to_numeric(df['latitude'])(如果用Pandas的话)
  • 别写错参数名!Plotly的scattergeo只认lat和lon这两个参数,如果你数据里的字段叫latitude/longitude,一定要映射过去,不能直接把字段名丢进去。

3. 数据为空或超出合理范围

  • 检查你的经纬度有没有NaN值,或者数值明显离谱(比如纬度超过±90,经度超过±180),这些都会导致点不显示。用Pandas的话可以这么查:
    # 检查空值
    print(df[['lat','lon']].isnull().sum())
    # 检查异常值
    print(df[(df['lat']>90)|(df['lat']<-90)])
    

4. 标记配置太隐蔽

如果标记太小、颜色和地图背景太接近,也会看起来像没显示。试试把size调到10以上,用红、蓝这种高对比度颜色,把opacity设为0.8左右。

5. Jupyter Notebook的渲染问题

有时候Notebook的渲染会有延迟,试试重启内核再运行,或者用fig.show(renderer='browser')在浏览器里打开,排除Notebook本身的渲染bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:11:21