matplotlib-basemap 中的正射投影和 pcolormesh 问题
Problem with ortho projection and pcolormesh in matplotlib-basemap
我在使用正射投影和 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()
我得到以下情节:
随机噪声应该映射到整个球体上,但是正射图的右上角明显有错误
是否有其他人在使用包含的代码时遇到此错误?
由于底图需要您手动过滤掉不需要的数据("behind the globe"),下面是如何使用 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()
在 github 底图线程 here
中建议修复底图
我在使用正射投影和 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()
我得到以下情节:
随机噪声应该映射到整个球体上,但是正射图的右上角明显有错误
是否有其他人在使用包含的代码时遇到此错误?
由于底图需要您手动过滤掉不需要的数据("behind the globe"),下面是如何使用 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()
在 github 底图线程 here
中建议修复底图