Matplotlib Cartopy:海岸线()和轮廓线()

Matplotlib Cartopy:海岸线()和轮廓线(),matplotlib,cartopy,proj,Matplotlib,Cartopy,Proj,我正在尝试从Basemap迁移到Cartopy外观的演示示例。我有一个简单的代码,它同时使用了Coasines()和contourf()。我可以分别得到,但不能同时得到。该数据集是一个netcdf文件,其中包含西地中海的海面温度数据。代码是: import numpy as np from netCDF4 import Dataset import cartopy import matplotlib.pyplot as plt # DATA data = D

我正在尝试从Basemap迁移到Cartopy外观的演示示例。我有一个简单的代码,它同时使用了Coasines()和contourf()。我可以分别得到,但不能同时得到。该数据集是一个netcdf文件,其中包含西地中海的海面温度数据。代码是:

   import numpy as np
   from netCDF4 import Dataset
   import cartopy
   import matplotlib.pyplot as plt

   # DATA
   data = Dataset('20190715.0504.n19.nc','r')
   lon = data.variables['lon'][:]
   lat = data.variables['lat'][:]
   sst = data.variables['mcsst'][0,:,:].squeeze()
   xxT,yyT = np.meshgrid(lon,lat)

   # PLOT
   fig = plt.figure(figsize=(10, 5))
   ax1 = fig.add_axes([0.01,0.01,0.98,0.98],projection=cartopy.crs.Mercator())
   ax1.coastlines()
   #ax1.contourf(xxT,yyT,sst)
   ax1.set_extent([16.5, -15.0, 35.0, 46.5])

   plt.show()
通过这段代码,我得到:

如果我使用:

   #ax1.coastlines()
   ax1.contourf(xxT,yyT,sst)
   ax1.set_extent([16.5, -15.0, 35.0, 46.5])
   #ax1.coastlines()
   ax1.contourf(xxT,yyT,sst)
   ax1.set_extent([16.5,-15.0,35.0,46.5],crs=cartopy.crs.Mercator())
我得到一个白色的长方形

如果我使用:

   #ax1.coastlines()
   ax1.contourf(xxT,yyT,sst)
   ax1.set_extent([16.5, -15.0, 35.0, 46.5])
   #ax1.coastlines()
   ax1.contourf(xxT,yyT,sst)
   ax1.set_extent([16.5,-15.0,35.0,46.5],crs=cartopy.crs.Mercator())
我得到了轮廓数据

但两者都有:

   ax1.coastlines()
   ax1.contourf(xxT,yyT,sst)
   ax1.set_extent([16.5,-15.0,35.0,46.5],crs=cartopy.crs.Mercator())
轮廓是好的!但是没有海岸线。如果最后

   ax1.coastlines()
   ax1.contourf(xxT,yyT,sst)
   ax1.set_extent([16.5,-15.0,35.0,46.5])

仅显示海岸线,不显示等高线!。我试图理解我必须如何继续,因为在尝试将其包含到GUI中时出现了问题,GUI中有用于显示/隐藏轮廓线、功能等的选项。以防我使用Python 3.7.4、Cartopy 0.17、proj4 5.2、matplotlib 3.1.1。谢谢

多亏了swatchai的建议,尽管我仍然不明白为什么我需要将transform关键字与特定的PlateCarree投影关键字一起使用,但是如果:

fig = plt.figure(figsize=(10, 5))
ax1 = fig.add_axes([0.01, 0.01, 0.98, 0.98],projection=cartopy.crs.Mercator())
ax1.coastlines('10m')
ax1.set_extent([16.5, -15.0, 35.0, 46.5])
ax1.contourf(xxT,yyT,sst,transform=cartopy.crs.PlateCarree())
结果如下:

只是一个粗略的猜测,
ax1.tourtf(xxT,yyT,sst,transform=cartopy.crs.Geodetic())
将变换坐标以匹配您使用的范围和投影。它不起作用。它在contourf raise ValueError中的第1385行引发:文件“/anaconda3/lib/python3.7/site packages/cartopy/mpl/geoaxes.py”(无效转换:'ValueError:无效转换:不支持球面轮廓)-考虑使用Purtrace/Road Posits,但使用CARPOTY。CRS。