Python中Plotly地图colorscale无法随地图移动问题求助
Plotly Mapbox颜色条无法随地图移动的解决方法
问题说明
使用Plotly的make_subplots创建1行2列布局(左侧为Mapbox地图,右侧为表格)时,Scattermapbox标记的颜色条(colorscale)无法随地图交互(平移、缩放)一同移动,始终固定在画布的某个位置。
解决思路
默认情况下,颜色条的坐标系绑定的是全局画布(paper),而非Mapbox所在的子图坐标系。只需将颜色条的坐标系改为对应子图的坐标系,并调整位置参数,就能让颜色条和地图保持相对位置,随地图联动。
修改后的代码
关键修改点是在scattermapbox.Marker中添加colorbar配置,指定坐标系为子图的x1和y1,并调整位置让颜色条紧贴地图右侧:
from plotly.subplots import make_subplots import plotly.graph_objects as go # 创建子图布局 fig = make_subplots( rows=1, cols=2, specs=[[{"type": "mapbox"}, {"type": "table"}]], horizontal_spacing=0.1, ) # 添加Mapbox散点轨迹 plt = go.Scattermapbox( lat=lats, lon=lons, mode="markers+text", marker=go.scattermapbox.Marker( size=10, color=scores, showscale=True, cmin=-1, cmax=1, # 核心修改:绑定颜色条到Mapbox子图坐标系 colorbar=dict( x=1.02, # 颜色条在子图右侧的位置 y=0.5, xref="x1", # 绑定到第一列子图的x轴坐标系 yref="y1", # 绑定到第一行子图的y轴坐标系 len=0.8, # 颜色条长度 tickvals=[-1, 0, 1], # 可选:自定义刻度值 ticktext=["-1", "0", "1"] ) ), text=texts, textposition="bottom right", ) fig.add_trace(plt, row=1, col=1) # 添加表格轨迹 table = go.Table( header=dict( values=["NOTAM_REC_ID", "SCORE", "TEXT"], fill_color="lightsteelblue", align="left", ), cells=dict( values=[matches_df.NOTAM_REC_ID, matches_df.SCORE, matches_df.E_CODE], fill_color="white", align="left", ), ) fig.add_trace(table, row=1, col=2) # 更新布局配置 fig.update_layout( autosize=True, hovermode="closest", mapbox=dict( accesstoken=mapbox_access_token, bearing=0, center=dict(lat=lats[3], lon=lons[3]), pitch=0, zoom=10, ), ) fig.show()
说明
xref="x1"和yref="y1":将颜色条的坐标系绑定到第一列第一行的子图(也就是Mapbox所在的子图),确保颜色条和地图保持相对位置。x=1.02:调整颜色条在子图右侧的偏移量,可根据实际布局微调这个值,让颜色条和地图的间距更合理。len=0.8:控制颜色条的高度,避免过长或过短影响视觉效果。
内容的提问来源于stack exchange,提问作者Edv Beq
相关产品推荐
相关产品推荐

