如何在Plotly(Python)散点地理图中添加经纬度刻度标签?
解决Plotly北美地图添加经纬度刻度标签的问题
我之前也踩过这个坑!Plotly地理轴的刻度标签设置确实不像常规图表那么直观,官方文档的Geo-Axes章节里lonaxis/lataxis的参数说明容易让人误以为没有相关设置,但其实核心是你漏掉了一个关键开关——showticklabels,再配合自定义刻度参数就能实现需求。
核心设置逻辑
在layout的geo字典中,需要同时配置以下几点:
- 开启
showticklabels: True(默认是False,所以之前设置了也看不到) - 选择刻度模式:要么自定义刻度值和文本,要么让Plotly自动生成
自定义刻度标签的代码示例
下面是针对北美地图的完整示例,包含降水地图(这里用示例数据代替,你可以替换成自己的数据集):
import plotly.express as px # 替换成你的降水数据,这里用选举数据做示例 df = px.data.election() fig = px.choropleth( df, geojson=px.data.election_geojson(), locations='district', color='Bergeron', scope='north america' # 指定地图范围为北美 ) # 关键的刻度标签配置 fig.update_layout( geo=dict( showticklabels=True, # 必须开启这个才会显示刻度 # 自定义经度刻度 lonaxis=dict( tickmode='array', # 使用自定义数组模式 tickvals=[-120, -100, -80, -60], # 经度数值 ticktext=['120°W', '100°W', '80°W', '60°W'] # 显示的标签文本 ), # 自定义纬度刻度 lataxis=dict( tickmode='array', tickvals=[30, 40, 50, 60], ticktext=['30°N', '40°N', '50°N', '60°N'] ), projection_type='albers usa' # 北美常用的投影类型,适配区域显示 ) ) fig.show()
自动生成刻度的替代方案
如果你不想手动指定刻度值,可以用linear模式,通过dtick控制间隔:
fig.update_layout( geo=dict( showticklabels=True, lonaxis=dict( tickmode='linear', dtick=20 # 经度每20度显示一个刻度 ), lataxis=dict( tickmode='linear', dtick=10 # 纬度每10度显示一个刻度 ), projection_type='albers usa' ) )
为什么之前没生效?
showticklabels默认关闭,这是最容易忽略的点,即使配置了tickvals也不会显示- 不同投影类型(比如
albers usa)会自动裁剪地图范围,所以刻度值要落在北美区域内才会显示 - 官方文档的参数分散在
geo和lonaxis/lataxis下,需要结合起来看才会明白完整逻辑
内容的提问来源于stack exchange,提问作者spacetyper




