我在Python2.7上使用basemap,但是我想使用Python3,并为此迁移到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?
谢谢!
发布于 2018-07-20 21:47:14
要将网格线涂成黑色的,可以使用color=关键字:
ax.gridlines(color='black')要指定lat/lon网格线布局,实际上只需要几行额外的行,如果您不关心标签:
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])(在撰写这篇文章时,Robinson的预测不支持网格标签。)
要在地图上覆盖您的数据,,pcolor应该可以工作,但它的速度非常慢。我建议使用pcolormesh,尽管您可以在这个语法中用一个代替另一个:
ax.pcolormesh(lon_values, lat_values, data)请注意,如果您的数据出现在与正在绘制的映射投影不同的投影(通常为真)上,则需要使用transform=关键字在绘图语法中指定数据的投影。这告诉cartopy将数据从原始投影转换为地图投影。板块Carrée与圆柱等距相同(例如,对于气候模式输出而言,这是典型的):
ax.pcolormesh(lon_values, lat_values, data, transform=ccrs.PlateCarree())https://stackoverflow.com/questions/51327171
复制相似问题