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

Plotly多散点图合并图例及子图间距问题求助

Plotly Scattermapbox 问题解决方案

问题1:图例显示异常与Trace重命名

问题根源

  • 直接批量绘制df1的所有点时,Plotly会将其视为单个Trace,仅生成一个图例项;
  • 未给Trace指定自定义名称,导致默认显示"trace 1"、"trace 2"这类系统生成名。

解决步骤

  1. 给原始数据集对应的Trace添加name参数,替换默认的"trace 1";
  2. 遍历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无法压缩这部分空间。

解决步骤

  1. 将vertical_spacing设置为更小的值(如0.02~0.05);
  2. 为每个mapbox子图设置极小的margin,减少上下留白;
  3. 调整整体图的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 09:37:55