Source code for hipscat.inspection.visualize_catalog

"""Generate a molleview map with the pixel densities of the catalog

NB: Testing validity of generated plots is currently not tested in our unit test suite.
"""

from typing import Any, Dict, List, Union

import healpy as hp
import matplotlib.colors as mcolors
import numpy as np
from matplotlib import pyplot as plt

from hipscat.catalog import Catalog
from hipscat.io import file_io, paths
from hipscat.pixel_math import HealpixPixel


[docs] def _read_point_map(catalog_base_dir, storage_options: Union[Dict[Any, Any], None] = None): """Read the object spatial distribution information from a healpix FITS file. Args: catalog_base_dir: path to a catalog Returns: one-dimensional numpy array of long integers where the value at each index corresponds to the number of objects found at the healpix pixel. """ map_file_pointer = paths.get_point_map_file_pointer(catalog_base_dir) return file_io.read_fits_image(map_file_pointer, storage_options=storage_options)
[docs] def plot_points(catalog: Catalog, projection="moll", **kwargs): """Create a visual map of the input points of an in-memory catalog. Args: catalog (`hipscat.catalog.Catalog`) Catalog to display projection (str) The map projection to use. Valid values include: - moll - Molleweide projection (default) - gnom - Gnomonic projection - cart - Cartesian projection - orth - Orthographic projection """ if not catalog.on_disk: raise ValueError("on disk catalog required for point-wise visualization") point_map = _read_point_map(catalog.catalog_base_dir, storage_options=catalog.storage_options) _plot_healpix_map(point_map, projection, f"Catalog point density map - {catalog.catalog_name}", **kwargs)
[docs] def plot_pixels(catalog: Catalog, projection="moll", **kwargs): """Create a visual map of the pixel density of the catalog. Args: catalog (`hipscat.catalog.Catalog`) Catalog to display projection (str) The map projection to use. Valid values include: - moll - Molleweide projection (default) - gnom - Gnomonic projection - cart - Cartesian projection - orth - Orthographic projection """ pixels = catalog.get_healpix_pixels() plot_pixel_list( pixels=pixels, plot_title=f"Catalog pixel density map - {catalog.catalog_name}", projection=projection, **kwargs, )
[docs] def plot_pixel_list(pixels: List[HealpixPixel], plot_title: str = "", projection="moll", **kwargs): """Create a visual map of the pixel density of a list of pixels. Args: pixels: healpix pixels (order and pixel number) to visualize plot_title (str): heading for the plot projection (str) The map projection to use. Valid values include: - moll - Molleweide projection (default) - gnom - Gnomonic projection - cart - Cartesian projection - orth - Orthographic projection """ max_order = np.max(pixels).order min_order = np.min(pixels).order if max_order == min_order: colors = [plt.cm.viridis(0.0), plt.cm.viridis(0.1)] # pylint: disable=no-member cmap = mcolors.LinearSegmentedColormap.from_list("my_colormap", colors, 1) kwargs["cbar"] = False plot_title = f"Norder {max_order} {plot_title}" else: num_colors = max_order - min_order + 1 colors = plt.cm.viridis(np.linspace(0, 1, num_colors)) # pylint: disable=no-member cmap = mcolors.LinearSegmentedColormap.from_list("my_colormap", colors, num_colors) order_map = np.full(hp.order2npix(max_order), hp.pixelfunc.UNSEEN) for pixel in pixels: explosion_factor = 4 ** (max_order - pixel.order) exploded_pixels = [ *range( pixel.pixel * explosion_factor, (pixel.pixel + 1) * explosion_factor, ) ] order_map[exploded_pixels] = pixel.order _plot_healpix_map(order_map, projection, plot_title, cmap=cmap, **kwargs)
[docs] def get_projection_method(projection): """Get the healpy plotting method for a specified projection string Args: projection (str): The map projection to use. Valid values include: - moll - Molleweide projection (default) - gnom - Gnomonic projection - cart - Cartesian projection - orth - Orthographic projection Returns: The healpy method that plots a HEALPix map with the specified projection """ if projection == "moll": projection_method = hp.mollview elif projection == "gnom": projection_method = hp.gnomview elif projection == "cart": projection_method = hp.cartview elif projection == "orth": projection_method = hp.orthview else: raise NotImplementedError(f"unknown projection: {projection}") return projection_method
[docs] def _plot_healpix_map(healpix_map, projection, title, cmap="viridis", **kwargs): """Perform the plotting of a healpix pixel map. Args: healpix_map: array containing the map projection: projection type to display title: title used in image plot cmap: matplotlib colormap to use """ projection_method = get_projection_method(projection) projection_method(healpix_map, title=title, nest=True, cmap=cmap, **kwargs) plt.plot()