Plotly多散点图合并图例及子图间距问题求助
Plotly Scattermapbox 问题解决方案
问题1:图例显示异常与Trace重命名
问题根源
- 直接批量绘制df1的所有点时,Plotly会将其视为单个Trace,仅生成一个图例项;
- 未给Trace指定自定义名称,导致默认显示"trace 1"、"trace 2"这类系统生成名。
解决步骤
- 给原始数据集对应的Trace添加
name参数,替换默认的"trace 1"; - 遍历df1的每一行数据,为每个高亮点单独创建Trace,分别指定
name和marker.color,确保每个点生成独立的图例项。
修改后代码片段
import plotly.graph_objects as go from plotly.subplots import make_subplots # 初始化2行1列的mapbox子图 fig = make_subplots( rows=2, cols=1, specs=[[{"type": "mapbox"}], [{"type": "mapbox"}]], vertical_spacing=0.05 ) # 添加原始数据Trace,自定义名称 fig.add_trace( go.Scattermapbox( lat=df['lat'], lon=df['lon'], mode='markers', name='全部点位', # 替换默认的trace1名称 marker=dict(size=8, color='#999999') ), row=1, col=1 ) # 为df1每个高亮点单独创建Trace,生成对应图例 color_list = ['red', 'green', 'blue'] for idx, (_, row) in enumerate(df1.iterrows()): fig.add_trace( go.Scattermapbox( lat=[row['lat']], lon=[row['lon']], mode='markers', name=f'高亮点位{row.name}', # 用原索引作为图例名 marker=dict(size=12, color=color_list[idx]) ), row=1, col=1 )
问题2:vertical_spacing无法缩小子图间距
问题根源
vertical_spacing取值范围为0到1,若设置值偏大(如>0.1),缩小效果不明显;- Mapbox子图默认带有较大的margin边距,仅靠
vertical_spacing无法压缩这部分空间。
解决步骤
- 将
vertical_spacing设置为更小的值(如0.02~0.05); - 为每个mapbox子图设置极小的margin,减少上下留白;
- 调整整体图的height,避免布局挤压导致间距无法缩小。
修改后代码片段
# 调整整体布局参数 fig.update_layout( height=600, # 根据需求设置合适高度 mapbox_style='carto-positron', mapbox_zoom=10, mapbox_center={"lat": df['lat'].mean(), "lon": df['lon'].mean()} ) # 缩小每个mapbox子图的上下边距 fig.update_layout( mapbox1_margin=dict(t=10, b=10), mapbox2_margin=dict(t=10, b=10) ) # 确认vertical_spacing设置 fig.update_layout(vertical_spacing=0.02)
内容的提问来源于stack exchange,提问作者Chopin
相关产品推荐
相关产品推荐

