缺乏对Cartopy轮廓的投影

时间:2019-06-25 20:20:53

标签: python matplotlib matplotlib-basemap cartopy

我正在尝试通过Cartopy将一些数据放到轮廓图上。但是,在绘制数据后,投影似乎仍然不正确。 surface_temp.X和surface_temp.Y为经/纬度,而masked_fill为实际数据值。这似乎已经在底图中起作用了,但是我不确定为什么它不在cartopy中。

Cartopy:

fig = plt.figure(figsize=(12,4.76), dpi=100)
fig.clf()
ax = plt.axes(projection=ccrs.Mercator())
ax.coastlines()
ax.contourf(surface_temp.X, surface_temp.Y, surface_temp.masked_fill[:], latlon = 'true', transform = ccrs.Mercator())
plt.show()

底图:

fig = plt.figure(figsize=(15,4.76), dpi=100)
        fig.clf()
        plt.axes([0,0,1,1], frameon=False)
        plt.title(title)
        m = Basemap(projection='merc',llcrnrlat=-80,urcrnrlat=80, llcrnrlon=0,urcrnrlon=360,lat_ts=20,resolution='c')
m.contourf(surface_temp.X, surface_temp.Y, surface_temp.masked_fill[:], latlon = 'true')

底图结果:

Basemap

Cartopy结果(轮廓被注释掉):

Cartopy - Merc

Cartopoy结果(轮廓)

Cartopy - Contour

1 个答案:

答案 0 :(得分:1)

始终使用纬度/经度坐标的Cartopy seems to be范例。这意味着,您不应根据预测来变换数据,而应保持经/纬度。

因此,而不是

ax.contourf(..., transform = ccrs.Mercator())

您需要

ax.contourf(..., transform = ccrs.PlateCarree())

完整的示例:

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from cartopy.examples.waves import sample_data

ax = plt.axes(projection=ccrs.Mercator())

lons, lats, data = sample_data(shape=(20, 40))

ax.contourf(lons, lats, data, transform=ccrs.PlateCarree())

ax.coastlines()
ax.gridlines()

plt.show()

enter image description here