You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Cartopy绘制的OpenStreetMap背景上叠加热力图?

解决Cartopy中叠加hist2d热力图的问题

你猜的完全正确!问题核心就在于坐标系不匹配,必须通过transform参数来指定你的经纬度数据对应的地理坐标系。

具体操作说明

Cartopy的地图axes使用的是OSM对应的Web Mercator投影坐标系,而你的经纬度点属于WGS84地理坐标系(也就是ccrs.PlateCarree())。直接调用hist2d时,函数会默认数据和axes的投影一致,这就导致了绘图失败或者位置偏移。

你只需要在ax.hist2d()中添加transform=ccrs.PlateCarree()参数,就能让Cartopy自动完成地理坐标到投影坐标的转换。另外还可以给热力图加个透明度参数alpha,让底层的OSM地图能清晰显示。

完整可运行代码

from __future__ import division
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.io.img_tiles as cimgt

# 初始化OSM地图请求
request = cimgt.OSM()
extent = [-89, -88, 41, 42]

# 创建带投影的绘图轴
ax = plt.axes(projection=request.crs)
ax.set_extent(extent)
ax.add_image(request, 8)

# 生成随机经纬度点(简化写法,避免负数运算歧义)
lons = np.random.uniform(-89, -88, 100)
lats = np.random.uniform(41, 42, 100)

# 叠加hist2d热力图,指定数据的坐标系
ax.hist2d(lons, lats, transform=ccrs.PlateCarree(), alpha=0.5, bins=10)

plt.show()

补充说明

所有基于经纬度的地理数据,在Cartopy的投影轴上绘图时,都需要通过transform参数声明数据的原始坐标系,这是Cartopy处理地图投影的核心逻辑,避免了手动坐标转换的繁琐。

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

火山引擎 最新活动