Как построить линии тока с данными 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
from matplotlib.ticker import MultipleLocator
import pandas as pd
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**

from netCDF4 import Dataset as NetCDFFile
import numpy as np
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
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»