Я новичок в программировании на Python и пытался получить карту «sst», но получилось так, что карта всегда делится пополам, когда дело доходит до отображения самих данных.
from matplotlib import pyplot as plt
from netCDF4 import Dataset
import numpy as np
from mpl_toolkits.basemap import Basemap
#the path the program will read;
data = Dataset('sst.day.mean.1981.nc')
#extracting variables.
lats= data.variables['lat'][:]
lons = data.variables['lon'][:]
time = data.variables['time'][:]
sst = data.variables['sst'][:]
#here i start defining the map
mp = Basemap(projection = 'cyl')
lon, lat = np.meshgrid(lons, lats)
#the abscissa and ordinate will be defined based on longitude and latitude, respectively.
x, y = mp(lon, lat)
c_scheme = mp.pcolor(x, y, np.squeeze(sst[0,:,:]), cmap = 'jet')
mp.drawcoastlines()
mp.drawstates()
mp.drawcountries()
plt.title('Sea surface temperature')
plt.show()

Я видел кого-то с похожей проблемой и пытался адаптировать решение к своему коду, но недостаточное понимание matplotlib привело меня к тому же результату, поскольку я не мог понять, как на самом деле matplotlib распределяется от 0 до 360 или от -180 до 180. .






вам следует установить значение latlon на True
c_scheme = mp.pcolor(x, y, sst[0,:,:], cmap = 'jet', latlon = True)
выход:
ваши данные имеют долготу в диапазоне от 0 до 360. Предположительно, matplotlib/basemap ожидает их в диапазоне от -180 до 180. Поэтому вам просто нужно настроить любые значения выше 180. Что-то вроде этого после загрузки ваших данных должно работать:
lon[lon>180] -= 360