def minput_2d(data, lon, lat, metadata, map_region=None): """ Put the data into magics minput function. minput is used 2 define matrices as input for contouring or list of values as input of curve or symbol plotting. Args: data (np.float64): 2D array, [nlat, nlon] lon (np.float64): 1D vector, [nlon] lat (np.float64): 1D vector, [nlat] metadata (dictionary): variable name and units information, like {'units': 'K', 'long_name': '2 metre temperature'}. Defaults to None. map_region (list, optional): if set, the data will fit to the map_region. [lonmin, lonmax, latmin, latmax] """ lat = np.squeeze(lat.astype(np.float64)) lon = np.squeeze(lon.astype(np.float64)) input_field_values = np.squeeze(data.astype(np.float64)) if map_region is not None: loni, lonj, lati, latj = grid_subset(lon, lat, map_region) lon = lon[loni:lonj] lat = lat[lati:latj] input_field_values = input_field_values[lati:latj, loni:lonj] # put values into magics return magics.minput(input_type="geographical", input_field=input_field_values, input_latitudes_list=lat, input_longitudes_list=lon, input_metadata=metadata)
def minput_2d_vector(udata, vdata, lon, lat, skip=1, metadata=None, map_region=None): """ Put the data into magics minput function. minput is used 2 define matrices as input for contouring or list of values as input of curve or symbol plotting. Args: udata (np.array): 2D array, [nlat, nlon] vdata (np.array): 2D array, [nlat, nlon] lon (np.array): 1D vector, [nlon] lat (np.array): 1D vector, [nlat] skip (int, optional): grid skip point number. Defaults to 1. metadata (dictionary): variable name and units information, like {'units': 'm/s', 'long_name': 'wind field'}. Defaults to None. map_region (list, optional): if set, the data will fit to the map_region. [lonmin, lonmax, latmin, latmax] """ # extract values lat = np.squeeze(lat.astype(np.float64)) # 1D vector lon = np.squeeze(lon.astype(np.float64)) # 1D vector uwind_field = np.squeeze(udata.astype( np.float64)) # 2D array, [nlat, nlon] vwind_field = np.squeeze(vdata.astype( np.float64)) # 2D array, [nlat, nlon] if map_region is not None: loni, lonj, lati, latj = grid_subset(lon, lat, map_region) lon = lon[loni:lonj] lat = lat[lati:latj] uwind_field = uwind_field[lati:latj, loni:lonj] vwind_field = vwind_field[lati:latj, loni:lonj] lon, lat = np.meshgrid(lon, lat) # skip values and flatten uwind_field = uwind_field[::skip, ::skip].flatten() vwind_field = vwind_field[::skip, ::skip].flatten() lat = lat[::skip, ::skip].flatten() lon = lon[::skip, ::skip].flatten() # remove nan values index = (~np.isnan(uwind_field)) & (~np.isnan(vwind_field)) uwind_field = uwind_field[index] vwind_field = vwind_field[index] if uwind_field.size == 0: return None lat = lat[index] lon = lon[index] # check meta information if metadata is None: metadata = {'units': 'm/s', 'long_name': 'wind field'} # put into magics minput function return magics.minput(input_type="geographical", input_x_component_values=uwind_field, input_y_component_values=vwind_field, input_latitude_values=lat, input_longitude_values=lon, input_metadata=metadata)