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
相关产品推荐
相关产品推荐

