无法为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
相关产品推荐
相关产品推荐

