Как построить линии тока с данными netcdf в Python, используя cartopy или базовую карту?Python

Программы на Python
Ответить
Anonymous
 Как построить линии тока с данными netcdf в Python, используя cartopy или базовую карту?

Сообщение Anonymous »

Я хотел построить линии тока с помощью NOAA из композита (2,5*2,5 долготы/широты).
Я пытался нарисовать их с помощью базовой карты (коды прилагаются), но столкнулся с этой ошибкой: 'y' должно быть строго увеличивается.
После этого я решил нарисовать его с помощью cartopy (Коды прилагаются) с помощью (crs=ccrs.PlateCarree(central_longitude=180). Линии тока в диапазоне От 160 градусов востока до 160 градусов запада не были нарисованы.
Конечно, используя эти данные о ветре, я нарисовал вектор ветра на базовой карте, используя этот код:

Код: Выделить всё

plt.quiver(lon[::5],lat[::5],U4[0,::5,::5],V4[0,::5,::5],scale_units='xy',scale=0.25)
, но я получил ошибку при рисовании линии тока.
Я был бы очень признателен, если бы кто-нибудь помог мне решить эту проблему (с помощью базовой карты или картопии).
Мои коды пытаются решить проблему:

Код: Выделить всё

from netCDF4 import Dataset as NetCDFFile
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.basemap import Basemap

fig = plt.figure(figsize=(12,9))
ax = fig.add_subplot(111)
nc2 = NetCDFFile('E:/cycle-of-Mjo/NOAA/nc/u850b1.nc')
nc4 = NetCDFFile('E:/cycle-of-Mjo/NOAA/nc/v850b1.nc')
lat = nc2.variables['lat'][:]
lon = nc2.variables['lon'][:]
U4 = nc2.variables['uwnd'][:]
V4 = nc4.variables['vwnd'][:]
map = Basemap(projection='cyl', lon_0 =0 , lat_0 =-20 ,
llcrnrlon=0.,llcrnrlat=-20.,urcrnrlon=360.,urcrnrlat=61.,resolution='i'
,suppress_ticks=False)
plt.tick_params(labelleft=False, labelbottom=False , axis='both',which='major')
map.drawcoastlines()
parallels = np.arange(-20.,61.,20.)
meridians = np.arange(0,360.,50.)
map.drawparallels(lat_ticks,labels=[0,0,0,0],fontsize=10 , dashes=(0,1), fontweight='bold')
map.drawmeridians(lon_ticks,labels=[0,0,0,0],fontsize=10 , dashes=(0,1), fontweight='bold')
lons,lats= np.meshgrid(lon,lat)
x,y = map(lons,lats)
map.streamplot(x,y,U1[0, :, :],V1[0, :, :],density = 2)

Код: Выделить всё

**Error:'y' must be strictly increasing**
С Cartopy:

Код: Выделить всё

from netCDF4 import Dataset as NetCDFFile
import numpy as np
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import cartopy.mpl.ticker as cticker
from cartopy.mpl.ticker import LatitudeFormatter, LongitudeFormatter
from cartopy.mpl.gridliner import LongitudeFormatter

nc2 = NetCDFFile('E:/cycle-of-Mjo/NOAA/nc/u850b1.nc')
nc4 = NetCDFFile('E:/cycle-of-Mjo/NOAA/nc/v850b1.nc')
lat = nc2.variables['lat'][:]
lon = nc2.variables['lon'][:]
U4 = nc2.variables['uwnd'][:]
V4 = nc4.variables['vwnd'][:]
ax = plt.axes(projection=ccrs.PlateCarree(central_longitude=180.0))
ax.coastlines()
ax.set_extent([0, 360, -20, 60], crs=ccrs.PlateCarree())
ax.set_xticks(np.arange(0,360,50), crs=ccrs.PlateCarree())
strm = plt.streamplot(lon[::5], lat[::5], U1[0,::5,::5], V1[0,::5,::5], color='blue',
density=1,arrowstyle='->', arrowsize=1, transform=ccrs.PlateCarree() )
plt.show()
Изображение



Подробнее здесь: https://stackoverflow.com/questions/791 ... or-basemap
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»