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