【问题标题】:Problem with ortho projection and pcolormesh in matplotlib-basemapmatplotlib-basemap 中的正射投影和 pcolormesh 问题
【发布时间】:2019-07-24 23:56:01
【问题描述】:

我对正射投影和 pcolormesh 有问题。

它应该绘制一个网格点的网格。相反,在球体的右上角,它绘制了奇怪的线而不是网格点。网格的映射看起来不对。

我尝试了下面的代码。

from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt

plt.clf()

dpp =1 # degrees per pixel
lons = np.arange(-180,180+dpp,dpp)
lats = -1*np.arange(-90,90+dpp,dpp)

m = Basemap(projection='ortho', lon_0=0, lat_0=-60, resolution='l')
data = np.random.random((np.size(lats), np.size(lons)))
lons, lats = np.meshgrid(lons, lats)
x, y = m(lons, lats)

im = m.pcolormesh(x, y, data, latlon=False, cmap='RdBu')
#im = m.pcolormesh(lons, lats, data, latlon=True, cmap='RdBu')

m.colorbar(im)
plt.show()

我得到以下情节:

随机噪声应该映射到整个球体上,但是正射映射的右上角明显有错误。

是否有其他人使用包含的代码收到此错误?

【问题讨论】:

  • 你有整个地球的数据,所以 pcolormesh 继续在地球的“后面”。您需要屏蔽所有不显示的数据。对于以lon_0=0, lat_0=0 为中心的地球,这比转移的地球要容易一些。
  • 所以底图中的正射投影基本上不兼容 pcolormesh 而不为数据创建自定义掩码?似乎是一个很大的疏忽。我不应该仅仅为了在正射投影上绘制数据而计算自定义掩码。 example 绘制大陆没有这个问题(尽管它不使用 pcolormesh)。是否有其他方法可以让我在正射投影上绘制数据网格?
  • 原则上,您绘制的所有内容都会显示出来。所以我不会责怪底图做它被要求做的事情。
  • 也许值得注意的是,cartopy 有一种不同的方法,它使用不同的投影来处理数据本身。我想看看 cartopy 在这种情况下的行为是有意义的,并可能在未来调整 cartopy 的代码。
  • 底图未按要求执行。 basemap documentation for an ortho projection 不显示绘制在球体另一侧的对象。在正射投影上绘制数据的预期行为是仅在地图的可见侧显示该数据。我会调查一下cartopy。

标签: matplotlib matplotlib-basemap orthographic


【解决方案1】:

由于底图需要您手动过滤掉不需要的数据(那些“在全球范围内”的数据),以下是如何对 cartopy 执行相同操作。

import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs

proj = ccrs.Orthographic(central_longitude=0.0, central_latitude=-60.0)

plt.figure(figsize=(3, 3))
ax = plt.axes(projection=proj)

dpp =1 
lons = np.arange(-180,180+dpp,dpp)
lats = 1*np.arange(-90,90+dpp,dpp)
data = np.random.random((np.size(lats), np.size(lons)))
lons, lats = np.meshgrid(lons, lats)
im = ax.pcolormesh(lons, lats, data, cmap='RdBu', transform=ccrs.PlateCarree())

ax.coastlines(resolution='110m')
ax.gridlines()
plt.show()

【讨论】:

  • 我会试试这个。谢谢!
【解决方案2】:

在 github 底图线程 here 中建议对底图进行修复

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    相关资源
    最近更新 更多