Отредактировано для учета комментариев к данным.
Проблема с заполненными областями связана с переносом. То, что вы видите, это построение графиков данных, например, от +179,8 (правая сторона графика) до -178,4 (левая сторона графика) - CartoPy неправильно обрезает, поэтому у вас есть длинные полосы построения данных по карте. В областях с другими нанесенными данными эти полосы покрыты. Там, где у вас нет данных (т.е. на суше), просвечивают полосы.
Один из обходных путей - отрегулировать начало проекции, что может устранить некоторые из этих линий. У меня был некоторый успех с небольшими корректировками (~ 1 градус), но лучше всего было бы сделать так, чтобы левый и правый края исходной области данных были левым и правым краями графика. Для этого набора данных левый край имеет +73,5 долготы, поэтому мы хотим, чтобы начало координат было равно +180, что составляет -107,5 долготы:
import intake
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import matplotlib.pyplot as plt
url = ('https://raw.githubusercontent.com/NCAR/'
'intake-esm-datastore/master/catalogs/pangeo-cmip6.json')
col = intake.open_esm_datastore(url)
col_hist = col.search(variable_id='o2', table_id='Omon', experiment_id='historical')
dict_hist = col_hist.to_dataset_dict(zarr_kwargs={'consolidated': True})
models = list(dict_hist.keys())
model = models[5]
ds = dict_hist[model]
sub1 = ds.o2.sel(member_id=ds.member_id.values[0], time=ds.time.values[0])
sub2 = sub1.sel(lev=100, method='nearest')
ax = plt.axes(projection=ccrs.Robinson(central_longitude=-107.5))
q = sub2.plot(ax=ax, transform=ccrs.PlateCarree(), x='longitude', y='latitude',
vmin=0, vmax=0.4, cbar_kwargs={'shrink': 0.5})
ax.coastlines()
ax.set_global()
, что дает мне следующее изображение:
В идеале, CartoPy справится с этим правильно, но сейчас есть много проблем с этим (например, этот ).