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

无法为Mapbox地图添加年份标题问题求助

解决Mapbox散点图循环生成时标题不显示的问题

问题根源

你的代码里有两个关键问题导致标题无法显示:

  • margin={"r":0,"t":0,"l":0,"b":0}将顶部边距设为0,标题被完全裁剪,无法在画布内显示
  • 筛选出的年份数据sp未被使用,画图时用了整个数据集,同时sp1是未定义的变量(应为dataframe)

修正方案1:调整边距显示标题

修改顶部边距,给标题留出空间,同时使用正确的筛选数据:

import plotly.express as px
import pandas as pd
import os

year = [1980,1981,1983]
lat = [60.572959,  60.321403, 56.990280]
lon = [40.572759,  41.321203, 36.990299]
dataframe = pd.DataFrame(list(zip(year,lat,lon)), columns=['year', 'lat', 'lon'])

# 创建保存目录(如果不存在)
os.makedirs("all", exist_ok=True)

for idx, current_year in enumerate(sorted(dataframe['year'].unique())):
    # 筛选当前年份的数据
    sp = dataframe[dataframe['year'] == current_year]
    # 基于筛选后的数据画图
    fig = px.scatter_mapbox(sp, lat='lat', lon="lon",
                            color_discrete_sequence=["fuchsia"], zoom=2, height=400, opacity=0.3)
    fig.update_layout(mapbox_style="open-street-map")
    # 调整顶部边距,给标题留出空间
    fig.update_layout(margin={"r":0,"t":50,"l":0,"b":0})
    # 设置标题并居中
    fig.update_layout(title_text=str(current_year), title_x=0.5)
    fig.write_image(f"all/plot{idx}.png")

修正方案2:用标注在地图任意位置添加年份

如果不想调整边距,可以通过annotations在地图的任意位置(比如左上角、右下角)添加年份标识,不受边距限制:

import plotly.express as px
import pandas as pd
import os

year = [1980,1981,1983]
lat = [60.572959,  60.321403, 56.990280]
lon = [40.572759,  41.321203, 36.990299]
dataframe = pd.DataFrame(list(zip(year,lat,lon)), columns=['year', 'lat', 'lon'])

# 创建保存目录(如果不存在)
os.makedirs("all", exist_ok=True)

for idx, current_year in enumerate(sorted(dataframe['year'].unique())):
    sp = dataframe[dataframe['year'] == current_year]
    fig = px.scatter_mapbox(sp, lat='lat', lon="lon",
                            color_discrete_sequence=["fuchsia"], zoom=2, height=400, opacity=0.3)
    fig.update_layout(mapbox_style="open-street-map")
    # 保持原边距设置
    fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
    # 添加年份标注到地图左上角(可调整x/y位置,取值0-1对应画布相对位置)
    fig.add_annotation(
        text=str(current_year),
        x=0.05, y=0.95,
        xref="paper", yref="paper",
        showarrow=False,
        font=dict(size=20, color="black"),
        bgcolor="white",
        opacity=0.8
    )
    fig.write_image(f"all/plot{idx}.png")

关键说明

  • 方案1通过margin={"t":50}给标题预留顶部空间,标题会显示在画布上方
  • 方案2的annotations可以自定义位置、字体样式和背景,适配不同的布局需求
  • 必须使用筛选后的sp数据画图,避免所有年份显示相同的散点

内容的提问来源于stack exchange,提问作者huanpops

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:55:12