python - numpy 数组的 imshow 无法按预期使用 Cartopy

标签 python numpy matplotlib imshow cartopy

我正在尝试将 Aster GDEM 数据与 cartopy 一起使用,但没有成功: 假设我有一个 numpy 数组,我知道它的地理范围。我应该能够将它绘制为一个图层,比如来自 cartopy.io.img_tiles 的 GoogleTile。

示例代码:

proj = ccrs.Mercator()
extent = [32, 33, 29, 30]
data = np.random.rand(10,10)

fig = plt.figure(figsize=(4,4))
ax = fig.add_subplot(111, projection=proj)
ax.set_extent(extent)
ax.imshow(data, extent=extent, origin='upper',
      transform=proj, alpha=0.5)

gg_tiles = GoogleTiles()
ax.add_image(gg_tiles, 10, alpha=0.5)

ax.coastlines('10m')
ax.set_title('data with Google Tile')
gl = ax.gridlines(draw_labels=True)
gl.xlabels_top = None

产生:

enter image description here

数据未显示!

如果我评论 ax.set_extent(extent) 则显示数据但范围错误:

enter image description here

有什么建议吗?

最佳答案

使用 cartopy,如果您的数据位于错误的位置,我总是首先排除的前两件事是:

  • “我的投影是否正确?”
  • “我是否将经度/纬度与投影仪(又名东距/北距)混淆了?”

所以我做的第一件事就是去 NASA ASTER 站点,它似乎没有太多投影信息,但 jspacesystems 站点 ( http://www.jspacesystems.or.jp/ersdac/GDEM/E/4.html ) 有。它告诉我们,我们有:

The ASTER GDEM is in GeoTIFF format with geographic lat/long coordinates and a 1 arc-second (30 m) grid of elevation postings. It is referenced to the WGS84/EGM96 geoid.

这向我建议你最好使用 PlateCarree 投影(注意,这将使用错误引用的椭圆,但在这个分辨率下会很好)。

遗憾的是,获取 ASTER 数据有点令人头疼,因此我无法对此进行测试,但在这种情况下,只需将 proj 更改为 PlateCarree 即可。 (如果没有,请随时将图片发送到我的 github 个人资料中的电子邮件地址,我会看一下这个具体案例)。

HTH

关于python - numpy 数组的 imshow 无法按预期使用 Cartopy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23887758/

相关文章:

python - 根据阈值将 NumPy 数组转换为 0 或 1

Python 对字符串列表进行排序

python - 直方图上的瑞利分布曲线

python - 在 scikit-learn 中自动选择几个估计器中最好的一个

python - 向结构化numpy数组添加字段(三)

python - matplotlib 2.0.0 的默认样式名称是什么?

python - 如何在 Python/Jupyter 笔记本中省略 matplotlib 打印输出?

python - matplotlib 3D 图,plot_surface 黑色

python - Matplotlib/Pandas 中的链接和画笔——在另一个图中绘制一个图中的选定点

python - seaborn彩条移动标签