gpt4 book ai didi

matplotlib-basemap - 传输 basemap - cartopy

转载 作者:行者123 更新时间:2023-12-03 23:54:22 29 4
gpt4 key购买 nike

我在 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()

我不确定如何将网格线设置在确切位置以及如何将它们着色为黑色而不是灰色。此外,我想知道如何用数据插入/覆盖我的实际 map 。 cartopy 是否支持“ax.pcolor”?

谢谢!

最佳答案

将网格线涂成黑色 ,您可以使用 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])

(在撰写本文时,罗宾逊投影不支持网格线标签。)

在 map 上叠加您的数据 , pcolor应该可以工作,但速度很慢。我会推荐 pcolormesh ,尽管您可以在此语法中用一个替换另一个:
ax.pcolormesh(lon_values, lat_values, data)

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

关于matplotlib-basemap - 传输 basemap - cartopy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51327171/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com