转移基础地图 - Cartopy

4

我正在使用Python 2.7上的basemap,但想转向Python 3,因此转向cartopy。如果您能给我一些建议,告诉我如何将我的代码从basemap更改为cartopy,那就太棒了:

以下是basemap代码:

from mpl_toolkits.basemap import Basemap
    # plot map without continents and coastlines
    m = Basemap(projection='kav7',lon_0=0)
    # draw map boundary, transparent
    m.drawmapboundary()
    m.drawcoastlines()
    # draw paralells and medians, no labels
    if (TheLatInfo[1] == len(TheLatList)) & (TheLonInfo[1] == len(TheLonList)):
        m.drawparallels(np.arange(-90,90.,30.))
        m.drawmeridians(np.arange(-180,180.,60.))

grids = m.pcolor(LngArrLons,LngArrLats,MSKTheCandData,cmap=cmap,norm=norm,latlon='TRUE')

这是我找到的cartopy示例,并更改了一些部分:

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import cartopy.feature as cpf

ax = plt.axes(projection=ccrs.Robinson())
ax.coastlines()
ax.set_boundary
ax.gridlines(draw_labels=False)
plt.show()

我不确定如何将网格线设置在准确的位置并使它们变为黑色而不是灰色。此外,我想知道如何插入/覆盖我的实际数据地图。 "ax.pcolor" 在 cartopy 中得到了很好的支持吗?

谢谢!

1个回答

4
为了使您的网格线变为黑色,您可以使用color=关键字:
ax.gridlines(color='black')

要指定经纬度网格线的位置,如果您不关心标签,只需要添加几行额外代码即可:
import matplotlib.ticker as mticker

gl = ax.gridlines(color='black')
gl.xlocator = mticker.FixedLocator([-180, -90, 0, 90, 180])
gl.ylocator = mticker.FixedLocator([-90,-45,0,45,90])

(截至撰写本文,罗宾逊投影不支持网格线标签。)
为了在地图上叠加您的数据,应使用“pcolor”,但这种方法极其缓慢。 我建议使用“pcolormesh”,尽管您可以在此语法中将一个替换为另一个。
ax.pcolormesh(lon_values, lat_values, data)

请注意,如果您的数据与您正在绘制的地图投影不同(通常是这样),则需要在绘图语法中使用“transform=”关键字指定数据的投影。这告诉cartopy将您的数据从其原始投影转换为地图的投影。Plate Carrée与圆柱等距投影相同(例如气候模型输出通常采用此投影)。
ax.pcolormesh(lon_values, lat_values, data, transform=ccrs.PlateCarree())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接