Plotly绘制西西里地震烈度地图时全球统一颜色问题排查
解决Plotly绘制西西里地震烈度地图显示异常的问题
你遇到的全球单一颜色显示问题,主要由参数配置错误、地图范围未限定以及可能存在的地名匹配差异导致,以下是具体修复方案:
修复步骤
- 修正无效的
labels参数:原代码中labels={"aaa"}是语法错误,Plotly要求该参数为键值对字典,若不需要自定义标签可直接删除,或改为对应字段的说明(例如labels={"classificazione": "地震烈度等级"})。 - 限定地图显示范围:取消
scope="europe"的注释,强制地图聚焦欧洲区域,避免显示全球导致的视觉混淆。 - 验证地名匹配一致性:确认GeoJSON中
properties.Comune的地名与CSV中comune列的内容完全一致(包括大小写、重音符号、空格),这是数据关联的核心。若存在差异,需统一两边的地名格式(例如批量替换CSV中的拼写错误)。 - 优化地理参数:在
update_geos中添加projection_type="mercator",提升区域地图的显示精度。
修改后的完整代码
from urllib.request import urlopen import json import pandas as pd import plotly.express as px with urlopen('https://raw.githubusercontent.com/Gangelo99/Sismicita-Sicilia/main/classificazione-sismica.geojson') as response: polygons = json.load(response) # 读取CSV时确保地名列格式正确 df = pd.read_csv("https://raw.githubusercontent.com/Gangelo99/Sismicita-Sicilia/main/dataset_choropleth.csv", dtype={"comune": str}) # 验证地名匹配(可选,用于排查问题) # geo_names = [feat['properties']['Comune'] for feat in polygons['features']] # df_names = df['comune'].tolist() # print("GeoJSON中存在但CSV中没有的地名:", set(geo_names) - set(df_names)) # print("CSV中存在但GeoJSON中没有的地名:", set(df_names) - set(geo_names)) fig = px.choropleth( df, geojson=polygons, locations='comune', featureidkey='properties.Comune', color="classificazione", color_continuous_scale="Viridis", range_color=(1, 4), scope="europe", # 限定地图范围 labels={"classificazione": "地震烈度等级"} # 修正labels参数 ) fig.update_layout(margin={"r": 0, "t": 0, "l": 0, "b": 0}) fig.update_geos( fitbounds="locations", visible=True, projection_type="mercator" # 添加投影类型 ) fig.show()
额外排查提示
如果修复后仍有部分区域未着色,可取消代码中验证地名匹配的注释,查看两边地名的差异,针对性修正数据中的拼写或格式问题。
内容的提问来源于stack exchange,提问作者ganjelo
相关产品推荐
相关产品推荐

