示例#1
0
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)
示例#2
0
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)