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

使用geoplot时标记与颜色条颜色不匹配的问题解决咨询

问题:地震标记颜色与颜色条不匹配

我正通过经纬度绘制各地震的位置,使用GeoJSON数据绘制底图,再利用数据中的Longitude(经度)和Latitude(纬度)列在地图上绘制标记。但标记颜色与颜色条不匹配:标注为8.2的震级标记按颜色条应呈现深红色,实际却显示为偏黄色,请问该如何解决此问题?

geojson_path = '/content/drive/MyDrive/ColabNotebooks/Practice/nepal.geojson'
gdf = gpd.read_file(geojson_path)


# 读取CSV数据
mydata = pd.read_csv('/content/drive/MyDrive/ColabNotebooks/Practice/earthquakes.tsv', sep='\t')
df = mydata[mydata['Mag'].notnull()]

# 从经纬度创建GeoDataFrame
geometry = gpd.points_from_xy(df['Longitude'], df['Latitude'])
gdf_points = gpd.GeoDataFrame(df, geometry=geometry)
# 设置画布尺寸
fig, ax = plt.subplots(figsize=(15, 8)) 

# 定义颜色映射和归一化规则
cmap = plt.get_cmap('YlOrRd')  # 可替换为其他配色
norm = Normalize(vmin=df['Mag'].min(), vmax=df['Mag'].max())


# 绘制底图
gdf.plot(ax=ax)

# 绘制地震点标记
scatter = gdf_points.plot(
    ax=ax, 
    cmap=cmap,
    markersize=(df['Mag']) * 200,
    c=df['Mag'],  # 用震级值映射颜色
    norm=norm,
    alpha=1
)

# 添加颜色条
sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
sm.set_array([])  
cbar = plt.colorbar(sm, ax=ax, label='震级')

# 为每个标记标注震级
for x, y, label in zip(df['Longitude'], df['Latitude'], df['Mag']):
    plt.text(x, y, str(label), color='white', ha='center', va='center')

plt.title('CSV数据地震点位可视化')
plt.show()

地震可视化效果

解决方案

问题核心是GeoPandas的plot()方法没有正确识别你定义的norm归一化参数,导致颜色映射逻辑和颜色条脱节。可以通过以下两种方式解决:

方法1:改用Matplotlib原生scatter绘制点

直接用Matplotlib的底层方法绘制散点,能确保颜色和归一化规则完全匹配:

# 替换原代码中gdf_points.plot()的部分
scatter = ax.scatter(
    df['Longitude'], 
    df['Latitude'],
    c=df['Mag'],
    cmap=cmap,
    norm=norm,
    s=df['Mag'] * 200,
    alpha=1
)

方法2:提前归一化震级值

如果坚持用GeoPandas的plot(),可以先手动对震级值做归一化,再传入颜色参数:

# 先对震级值做归一化处理
df['Mag_normalized'] = norm(df['Mag'])

# 绘制时使用归一化后的值
scatter = gdf_points.plot(
    ax=ax, 
    cmap=cmap,
    markersize=(df['Mag']) * 200,
    c=df['Mag_normalized'],
    alpha=1
)

额外检查项

  • 确认df['Mag']是数值类型(如float),字符串类型会导致颜色映射失效
  • 检查df['Mag'].min()和df['Mag'].max()的结果,若数据存在异常值,会拉宽颜色条范围,导致高震级的颜色偏浅

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 18:19:53