【发布时间】: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