Module pyaurorax.tools.grid_files
Prepare grid data for plotting.
Functions
def prep_grid_image(grid: numpy.ndarray,
fill_val: float | int = -999.0,
scale: numpy.ndarray | list | None = None,
cmap: str | None = 'Greys_r') ‑> numpy.ndarray-
Expand source code
def prep_grid_image( grid: np.ndarray, fill_val: Union[int, float] = -999.0, scale: Optional[Union[list, np.ndarray]] = None, cmap: Optional[str] = "Greys_r", ) -> np.ndarray: """ Takes a grid array, and converts it to RGBA format, masking all empty cells with max transparency, so that it can be plotted overtop of a map. Args: grid (numpy.ndarray): The grid array to prepare. Usually a result of reading a grid file and obtaining grid data from said file. fill_val (int or float): The fill value that was used to fill grid cells containing no data. Usually obtained from the grid file's metadata. scale (list or numpy.ndarray): A two-element vector specifying the minimum and maximum values to scale data between, optional (defaults to data min/max). cmap (str): A string giving the name of a matplotlib colormap to prep single-channel image data using, optional (defaults to "Greys_r"). Returns: The prepared RGBA grid array. Raises: ValueError: issues encountered with supplied parameters. """ # Determine number of channels in grid if len(grid.shape) == 2: n_channels = 1 elif len(grid.shape) == 3: n_channels = 3 else: raise ValueError("Routine currently only supports grid data with shape [rows, cols] or [rows, cols, channels].") # Convert grid to int type for plotting if np.issubdtype(grid.dtype, np.floating): grid = grid.astype(int) # Check that scale input is defined properly if scale is not None: # convert list to array if type(scale) is not np.ndarray: scale = np.array(scale) if scale.shape[0] != 2 or len(scale) != 2: raise ValueError("Scale must be provided as a two-element vector, i.e. [scale_min, scale_max].") # Handle RGB data first as it is straightforward if n_channels == 3: # Replace fill values with nans grid = np.where(grid == fill_val, np.nan, grid) # Scale the image data if scale is None: scaled_grid = scale_intensity(np.where(np.isnan(grid), 0, grid), top=255, memory_saver=False) else: scaled_grid = scale_intensity(np.where(np.isnan(grid), 0, grid), min=scale[0], max=scale[1], top=255, memory_saver=False) # Add alpha channel alpha_channel = np.where(np.isnan(grid).any(axis=-1), 0, 255) rgba_grid = np.dstack((scaled_grid, alpha_channel)) return rgba_grid.astype(int) # Handle case of single-channel data, where we build an RGBA image using a matplotlib colormap else: # Replace fill values with nans grid = np.where(grid == fill_val, np.nan, grid) # Scale the image data if scale is None: scaled_grid = scale_intensity(np.where(np.isnan(grid), 0, grid), top=255, memory_saver=False) else: scaled_grid = scale_intensity(np.where(np.isnan(grid), 0, grid), min=scale[0], max=scale[1], top=255, memory_saver=False) # Normalize array and apply colormap to obtain RGBA Array norm_scaled_grid = scaled_grid / 255.0 colormap = plt.get_cmap(cmap) norm_scaled_grid = colormap(norm_scaled_grid) # 'De-normalize' array back to 8-bit range rgba_grid = (norm_scaled_grid * 255).astype(int) # Add alpha channel with max transparency for cells with no data alpha_channel = np.where(np.isnan(grid), 0, 255) rgba_grid[..., -1] = alpha_channel return rgba_grid
Takes a grid array, and converts it to RGBA format, masking all empty cells with max transparency, so that it can be plotted overtop of a map.
Args
grid
:numpy.ndarray
- The grid array to prepare. Usually a result of reading a grid file and obtaining grid data from said file.
fill_val
:int
orfloat
- The fill value that was used to fill grid cells containing no data. Usually obtained from the grid file's metadata.
scale
:list
ornumpy.ndarray
- A two-element vector specifying the minimum and maximum values to scale data between, optional (defaults to data min/max).
cmap
:str
- A string giving the name of a matplotlib colormap to prep single-channel image data using, optional (defaults to "Greys_r").
Returns
The prepared RGBA grid array.
Raises
ValueError
- issues encountered with supplied parameters.