Exemplo n.º 1
0
def plot_line(
    y,
    x,
    as_subplot=False,
    label=None,
    plot_axis_type="semilogy",
    vertical_lines=None,
    vertical_line_labels=None,
    units="arcsec",
    kpc_per_arcsec=None,
    figsize=(7, 7),
    plot_legend=False,
    title="Quantity vs Radius",
    ylabel="Quantity",
    titlesize=16,
    xlabelsize=16,
    ylabelsize=16,
    xyticksize=16,
    legend_fontsize=12,
    output_path=None,
    output_format="show",
    output_filename="quantity_vs_radius",
):

    plotter_util.setup_figure(figsize=figsize, as_subplot=as_subplot)
    plotter_util.set_title(title=title, titlesize=titlesize)

    if x is None:
        x = np.arange(len(y))

    plot_y_vs_x(y=y, x=x, plot_axis_type=plot_axis_type, label=label)

    set_xy_labels_and_ticksize(
        units=units,
        kpc_per_arcsec=kpc_per_arcsec,
        ylabel=ylabel,
        xlabelsize=xlabelsize,
        ylabelsize=ylabelsize,
        xyticksize=xyticksize,
    )

    plot_vertical_lines(
        vertical_lines=vertical_lines,
        vertical_line_labels=vertical_line_labels,
        units=units,
        kpc_per_arcsec=kpc_per_arcsec,
    )

    set_legend(plot_legend=plot_legend, legend_fontsize=legend_fontsize)

    plotter_util.output_figure(
        array=None,
        as_subplot=as_subplot,
        output_path=output_path,
        output_filename=output_filename,
        output_format=output_format,
    )
    plotter_util.close_figure(as_subplot=as_subplot)
Exemplo n.º 2
0
def plot_inversion_with_source_values(
    inversion,
    source_pixel_values,
    plot_origin=True,
    positions=None,
    should_plot_centres=False,
    should_plot_grid=False,
    should_plot_border=False,
    image_pixels=None,
    source_pixels=None,
    as_subplot=False,
    units="arcsec",
    kpc_per_arcsec=None,
    figsize=(7, 7),
    aspect="square",
    cmap="jet",
    norm="linear",
    norm_min=None,
    norm_max=None,
    linthresh=0.05,
    linscale=0.01,
    cb_ticksize=10,
    cb_fraction=0.047,
    cb_pad=0.01,
    cb_tick_values=None,
    cb_tick_labels=None,
    title="Reconstructed Pixelization",
    titlesize=16,
    xlabelsize=16,
    ylabelsize=16,
    xyticksize=16,
    output_path=None,
    output_format="show",
    output_filename="pixelization_source_values",
):

    if isinstance(inversion.mapper, mappers.RectangularMapper):

        reconstructed_pixelization = inversion.mapper.reconstructed_pixelization_from_solution_vector(
            solution_vector=source_pixel_values)

        origin = get_origin(image=reconstructed_pixelization,
                            plot_origin=plot_origin)

        array_plotters.plot_array(
            array=reconstructed_pixelization,
            origin=origin,
            positions=positions,
            as_subplot=True,
            units=units,
            kpc_per_arcsec=kpc_per_arcsec,
            figsize=figsize,
            aspect=aspect,
            cmap=cmap,
            norm=norm,
            norm_min=norm_min,
            norm_max=norm_max,
            linthresh=linthresh,
            linscale=linscale,
            cb_ticksize=cb_ticksize,
            cb_fraction=cb_fraction,
            cb_pad=cb_pad,
            cb_tick_values=cb_tick_values,
            cb_tick_labels=cb_tick_labels,
            title=title,
            titlesize=titlesize,
            xlabelsize=xlabelsize,
            ylabelsize=ylabelsize,
            xyticksize=xyticksize,
            output_filename=output_filename,
        )

        mapper_plotters.plot_rectangular_mapper(
            mapper=inversion.mapper,
            should_plot_centres=should_plot_centres,
            should_plot_grid=should_plot_grid,
            should_plot_border=should_plot_border,
            image_pixels=image_pixels,
            source_pixels=source_pixels,
            as_subplot=True,
            units=units,
            kpc_per_arcsec=kpc_per_arcsec,
            title=title,
            titlesize=titlesize,
            xlabelsize=xlabelsize,
            ylabelsize=ylabelsize,
            xyticksize=xyticksize,
        )

        plotter_util.output_figure(
            array=reconstructed_pixelization,
            as_subplot=as_subplot,
            output_path=output_path,
            output_filename=output_filename,
            output_format=output_format,
        )

    elif isinstance(inversion.mapper, mappers.VoronoiMapper):

        mapper_plotters.plot_voronoi_mapper(
            mapper=inversion.mapper,
            source_pixel_values=source_pixel_values,
            should_plot_centres=should_plot_centres,
            should_plot_grid=should_plot_grid,
            should_plot_border=should_plot_border,
            image_pixels=image_pixels,
            source_pixels=source_pixels,
            as_subplot=True,
            units=units,
            kpc_per_arcsec=kpc_per_arcsec,
            title=title,
            titlesize=titlesize,
            xlabelsize=xlabelsize,
            ylabelsize=ylabelsize,
            xyticksize=xyticksize,
        )

        plotter_util.output_figure(
            array=None,
            as_subplot=as_subplot,
            output_path=output_path,
            output_filename=output_filename,
            output_format=output_format,
        )
Exemplo n.º 3
0
def plot_voronoi_mapper(
    mapper,
    source_pixel_values,
    should_plot_centres=True,
    should_plot_grid=True,
    should_plot_border=False,
    image_pixels=None,
    source_pixels=None,
    as_subplot=False,
    units="arcsec",
    kpc_per_arcsec=None,
    xyticksize=16,
    figsize=(7, 7),
    title="Rectangular Mapper",
    titlesize=16,
    xlabelsize=16,
    ylabelsize=16,
    cb_ticksize=10,
    cb_fraction=0.047,
    cb_pad=0.01,
    cb_tick_values=None,
    cb_tick_labels=None,
    output_path=None,
    output_filename="voronoi_mapper",
    output_format="show",
):

    plotter_util.setup_figure(figsize=figsize, as_subplot=as_subplot)

    set_axis_limits(mapper=mapper, units=units, kpc_per_arcsec=kpc_per_arcsec)

    regions_SP, vertices_SP = voronoi_finite_polygons_2d(mapper.voronoi)

    color_values = source_pixel_values[:] / np.max(source_pixel_values)
    cmap = plt.get_cmap("jet")

    set_colorbar(
        cmap=cmap,
        color_values=source_pixel_values,
        cb_fraction=cb_fraction,
        cb_pad=cb_pad,
        cb_tick_values=cb_tick_values,
        cb_tick_labels=cb_tick_labels,
    )

    for region, index in zip(regions_SP, range(mapper.pixels)):
        polygon = vertices_SP[region]
        col = cmap(color_values[index])
        plt.fill(*zip(*polygon), alpha=0.7, facecolor=col, lw=0.0)

    plotter_util.set_title(title=title, titlesize=titlesize)
    grid_plotters.set_xy_labels(
        units=units,
        kpc_per_arcsec=kpc_per_arcsec,
        xlabelsize=xlabelsize,
        ylabelsize=ylabelsize,
        xyticksize=xyticksize,
    )

    plot_centres(
        should_plot_centres=should_plot_centres,
        mapper=mapper,
        units=units,
        kpc_per_arcsec=kpc_per_arcsec,
    )

    plot_plane_grid(
        should_plot_grid=should_plot_grid,
        mapper=mapper,
        as_subplot=True,
        units=units,
        kpc_per_arcsec=kpc_per_arcsec,
        pointsize=10,
        xyticksize=xyticksize,
        title=title,
        titlesize=titlesize,
        xlabelsize=xlabelsize,
        ylabelsize=ylabelsize,
    )

    plot_border(
        should_plot_border=should_plot_border,
        mapper=mapper,
        as_subplot=True,
        units=units,
        kpc_per_arcsec=kpc_per_arcsec,
        pointsize=30,
        xyticksize=xyticksize,
        title=title,
        titlesize=titlesize,
        xlabelsize=xlabelsize,
        ylabelsize=ylabelsize,
    )

    mapper_grid = convert_grid(
        grid=mapper.grid, units=units, kpc_per_arcsec=kpc_per_arcsec
    )

    point_colors = itertools.cycle(["y", "r", "k", "g", "m"])
    plot_source_plane_image_pixels(
        grid=mapper_grid, image_pixels=image_pixels, point_colors=point_colors
    )
    plot_source_plane_source_pixels(
        grid=mapper_grid,
        mapper=mapper,
        source_pixels=source_pixels,
        point_colors=point_colors,
    )

    plotter_util.output_figure(
        None,
        as_subplot=as_subplot,
        output_path=output_path,
        output_filename=output_filename,
        output_format=output_format,
    )
    plotter_util.close_figure(as_subplot=as_subplot)
Exemplo n.º 4
0
def plot_rectangular_mapper(
    mapper,
    should_plot_centres=False,
    should_plot_grid=False,
    should_plot_border=False,
    image_pixels=None,
    source_pixels=None,
    as_subplot=False,
    units="arcsec",
    kpc_per_arcsec=None,
    xyticksize=16,
    figsize=(7, 7),
    title="Rectangular Mapper",
    titlesize=16,
    xlabelsize=16,
    ylabelsize=16,
    output_path=None,
    output_filename="rectangular_mapper",
    output_format="show",
):

    plotter_util.setup_figure(figsize=figsize, as_subplot=as_subplot)

    set_axis_limits(mapper=mapper, units=units, kpc_per_arcsec=kpc_per_arcsec)
    plot_rectangular_pixelization_lines(
        mapper=mapper, units=units, kpc_per_arcsec=kpc_per_arcsec
    )

    plotter_util.set_title(title=title, titlesize=titlesize)
    grid_plotters.set_xy_labels(
        units=units,
        kpc_per_arcsec=kpc_per_arcsec,
        xlabelsize=xlabelsize,
        ylabelsize=ylabelsize,
        xyticksize=xyticksize,
    )

    plot_centres(
        should_plot_centres=should_plot_centres,
        mapper=mapper,
        units=units,
        kpc_per_arcsec=kpc_per_arcsec,
    )

    plot_plane_grid(
        should_plot_grid=should_plot_grid,
        mapper=mapper,
        as_subplot=True,
        units=units,
        kpc_per_arcsec=kpc_per_arcsec,
        pointsize=10,
        xyticksize=xyticksize,
        title=title,
        titlesize=titlesize,
        xlabelsize=xlabelsize,
        ylabelsize=ylabelsize,
    )

    plot_border(
        should_plot_border=should_plot_border,
        mapper=mapper,
        as_subplot=True,
        units=units,
        kpc_per_arcsec=kpc_per_arcsec,
        pointsize=30,
        xyticksize=xyticksize,
        title=title,
        titlesize=titlesize,
        xlabelsize=xlabelsize,
        ylabelsize=ylabelsize,
    )

    mapper_grid = convert_grid(
        grid=mapper.grid, units=units, kpc_per_arcsec=kpc_per_arcsec
    )

    point_colors = itertools.cycle(["y", "r", "k", "g", "m"])
    plot_source_plane_image_pixels(
        grid=mapper_grid, image_pixels=image_pixels, point_colors=point_colors
    )
    plot_source_plane_source_pixels(
        grid=mapper_grid,
        mapper=mapper,
        source_pixels=source_pixels,
        point_colors=point_colors,
    )

    plotter_util.output_figure(
        None,
        as_subplot=as_subplot,
        output_path=output_path,
        output_filename=output_filename,
        output_format=output_format,
    )
    plotter_util.close_figure(as_subplot=as_subplot)
Exemplo n.º 5
0
def plot_array(
    array,
    origin=None,
    mask=None,
    extract_array_from_mask=False,
    zoom_around_mask=False,
    should_plot_border=False,
    lines=None,
    positions=None,
    centres=None,
    axis_ratios=None,
    phis=None,
    grid=None,
    as_subplot=False,
    units="arcsec",
    kpc_per_arcsec=None,
    figsize=(7, 7),
    aspect="equal",
    cmap="jet",
    norm="linear",
    norm_min=None,
    norm_max=None,
    linthresh=0.05,
    linscale=0.01,
    cb_ticksize=10,
    cb_fraction=0.047,
    cb_pad=0.01,
    cb_tick_values=None,
    cb_tick_labels=None,
    title="Array",
    titlesize=16,
    xlabelsize=16,
    ylabelsize=16,
    xyticksize=16,
    mask_pointsize=10,
    border_pointsize=2,
    position_pointsize=30,
    grid_pointsize=1,
    xticks_manual=None,
    yticks_manual=None,
    output_path=None,
    output_format="show",
    output_filename="array",
):
    """Plot an array of data_type as a figure.

    Parameters
    -----------
    array : data_type.array.scaled_array.ScaledArray
        The 2D array of data_type which is plotted.
    origin : (float, float).
        The origin of the coordinate system of the array, which is plotted as an 'x' on the image if input.
    mask : data_type.array.mask.Mask
        The mask applied to the array, the edge of which is plotted as a set of points over the plotted array.
    extract_array_from_mask : bool
        The plotter array is extracted using the mask, such that masked values are plotted as zeros. This ensures \
        bright features outside the mask do not impact the color map of the plot.
    zoom_around_mask : bool
        If True, the 2D region of the array corresponding to the rectangle encompassing all unmasked values is \
        plotted, thereby zooming into the region of interest.
    should_plot_border : bool
        If a mask is supplied, its borders pixels (e.g. the exterior edge) is plotted if this is *True*.
    positions : [[]]
        Lists of (y,x) coordinates on the image which are plotted as colored dots, to highlight specific pixels.
    grid : data_type.array.grids.Grid
        A grid of (y,x) coordinates which may be plotted over the plotted array.
    as_subplot : bool
        Whether the array is plotted as part of a subplot, in which case the grid figure is not opened / closed.
    units : str
        The units of the y / x axis of the plots, in arc-seconds ('arcsec') or kiloparsecs ('kpc').
    kpc_per_arcsec : float or None
        The conversion factor between arc-seconds and kiloparsecs, required to plot the units in kpc.
    figsize : (int, int)
        The size of the figure in (rows, columns).
    aspect : str
        The aspect ratio of the array, specifically whether it is forced to be square ('equal') or adapts its size to \
        the figure size ('auto').
    cmap : str
        The colormap the array is plotted using, which may be chosen from the standard matplotlib colormaps.
    norm : str
        The normalization of the colormap used to plot the image, specifically whether it is linear ('linear'), log \
        ('log') or a symmetric log normalization ('symmetric_log').
    norm_min : float or None
        The minimum array value the colormap map spans (all values below this value are plotted the same color).
    norm_max : float or None
        The maximum array value the colormap map spans (all values above this value are plotted the same color).
    linthresh : float
        For the 'symmetric_log' colormap normalization ,this specifies the range of values within which the colormap \
        is linear.
    linscale : float
        For the 'symmetric_log' colormap normalization, this allowws the linear range set by linthresh to be stretched \
        relative to the logarithmic range.
    cb_ticksize : int
        The size of the tick labels on the colorbar.
    cb_fraction : float
        The fraction of the figure that the colorbar takes up, which resizes the colorbar relative to the figure.
    cb_pad : float
        Pads the color bar in the figure, which resizes the colorbar relative to the figure.
    xlabelsize : int
        The fontsize of the x axes label.
    ylabelsize : int
        The fontsize of the y axes label.
    xyticksize : int
        The font size of the x and y ticks on the figure axes.
    mask_pointsize : int
        The size of the points plotted to show the mask.
    border_pointsize : int
        The size of the points plotted to show the borders.
    positions_pointsize : int
        The size of the points plotted to show the input positions.
    grid_pointsize : int
        The size of the points plotted to show the grid.
    xticks_manual :  [] or None
        If input, the xticks do not use the array's default xticks but instead overwrite them as these values.
    yticks_manual :  [] or None
        If input, the yticks do not use the array's default yticks but instead overwrite them as these values.
    output_path : str
        The path on the hard-disk where the figure is output.
    output_filename : str
        The filename of the figure that is output.
    output_format : str
        The format the figue is output:
        'show' - display on computer screen.
        'png' - output to hard-disk as a png.
        'fits' - output to hard-disk as a fits file.'

    Returns
    --------
    None

    Examples
    --------
        array_plotters.plot_array(
        array=image, origin=(0.0, 0.0), mask=circular_mask, extract_array_from_mask=True, zoom_around_mask=True,
        should_plot_border=False, positions=[[1.0, 1.0], [2.0, 2.0]], grid=None, as_subplot=False,
        units='arcsec', kpc_per_arcsec=None, figsize=(7,7), aspect='auto',
        cmap='jet', norm='linear, norm_min=None, norm_max=None, linthresh=None, linscale=None,
        cb_ticksize=10, cb_fraction=0.047, cb_pad=0.01, cb_tick_values=None, cb_tick_labels=None,
        title='Image', titlesize=16, xlabelsize=16, ylabelsize=16, xyticksize=16,
        mask_pointsize=10, border_pointsize=2, position_pointsize=10, grid_pointsize=10,
        xticks_manual=None, yticks_manual=None,
        output_path='/path/to/output', output_format='png', output_filename='image')
    """

    if array is None or np.all(array == 0):
        return

    if extract_array_from_mask and mask is not None:
        array = np.add(array,
                       0.0,
                       out=np.zeros_like(array),
                       where=np.asarray(mask) == 0)

    if zoom_around_mask and mask is not None:
        array = array.zoomed_scaled_array_around_mask(mask=mask, buffer=2)
        zoom_offset_pixels = np.asarray(mask.zoom_offset_pixels)
        zoom_offset_arcsec = np.asarray(mask.zoom_offset_arcsec)
    else:
        zoom_offset_pixels = None
        zoom_offset_arcsec = None

    if aspect is "square":
        aspect = float(array.shape_arcsec[1]) / float(array.shape_arcsec[0])

    fig = plot_figure(
        array=array,
        as_subplot=as_subplot,
        units=units,
        kpc_per_arcsec=kpc_per_arcsec,
        figsize=figsize,
        aspect=aspect,
        cmap=cmap,
        norm=norm,
        norm_min=norm_min,
        norm_max=norm_max,
        linthresh=linthresh,
        linscale=linscale,
        xticks_manual=xticks_manual,
        yticks_manual=yticks_manual,
    )

    plotter_util.set_title(title=title, titlesize=titlesize)
    set_xy_labels_and_ticksize(
        units=units,
        kpc_per_arcsec=kpc_per_arcsec,
        xlabelsize=xlabelsize,
        ylabelsize=ylabelsize,
        xyticksize=xyticksize,
    )

    plotter_util.set_colorbar(
        cb_ticksize=cb_ticksize,
        cb_fraction=cb_fraction,
        cb_pad=cb_pad,
        cb_tick_values=cb_tick_values,
        cb_tick_labels=cb_tick_labels,
    )
    plot_origin(
        array=array,
        origin=origin,
        units=units,
        kpc_per_arcsec=kpc_per_arcsec,
        zoom_offset_arcsec=zoom_offset_arcsec,
    )
    plot_mask(
        mask=mask,
        units=units,
        kpc_per_arcsec=kpc_per_arcsec,
        pointsize=mask_pointsize,
        zoom_offset_pixels=zoom_offset_pixels,
    )
    plotter_util.plot_lines(line_lists=lines)
    plot_border(
        mask=mask,
        should_plot_border=should_plot_border,
        units=units,
        kpc_per_arcsec=kpc_per_arcsec,
        pointsize=border_pointsize,
        zoom_offset_arcsec=zoom_offset_arcsec,
    )
    plot_points(
        points_arcsec=positions,
        array=array,
        units=units,
        kpc_per_arcsec=kpc_per_arcsec,
        pointsize=position_pointsize,
        zoom_offset_arcsec=zoom_offset_arcsec,
    )
    plot_grid(
        grid_arcsec=grid,
        array=array,
        units=units,
        kpc_per_arcsec=kpc_per_arcsec,
        pointsize=grid_pointsize,
        zoom_offset_arcsec=zoom_offset_arcsec,
    )
    plot_centres(
        array=array,
        centres=centres,
        units=units,
        kpc_per_arcsec=kpc_per_arcsec,
        zoom_offset_arcsec=zoom_offset_arcsec,
    )
    plot_ellipses(
        fig=fig,
        array=array,
        centres=centres,
        axis_ratios=axis_ratios,
        phis=phis,
        units=units,
        kpc_per_arcsec=kpc_per_arcsec,
        zoom_offset_arcsec=zoom_offset_arcsec,
    )
    plotter_util.output_figure(
        array,
        as_subplot=as_subplot,
        output_path=output_path,
        output_filename=output_filename,
        output_format=output_format,
    )
    plotter_util.close_figure(as_subplot=as_subplot)
Exemplo n.º 6
0
def plot_grid(
    grid,
    colors=None,
    axis_limits=None,
    points=None,
    lines=None,
    as_subplot=False,
    units="arcsec",
    kpc_per_arcsec=None,
    figsize=(12, 8),
    pointsize=5,
    pointcolor="k",
    xyticksize=16,
    cmap="jet",
    cb_ticksize=10,
    cb_fraction=0.047,
    cb_pad=0.01,
    cb_tick_values=None,
    cb_tick_labels=None,
    title="Grid",
    titlesize=16,
    xlabelsize=16,
    ylabelsize=16,
    symmetric_around_centre=True,
    output_path=None,
    output_format="show",
    output_filename="grid",
):
    """Plot a grid of (y,x) Cartesian coordinates as a scatter plot of points.

    Parameters
    -----------
    grid : data_type.array.grids.Grid
        The (y,x) coordinates of the grid, in an array of shape (total_coordinates, 2).
    axis_limits : []
        The axis limits of the figure on which the grid is plotted, following [xmin, xmax, ymin, ymax].
    points : []
        A set of points that are plotted in a different colour for emphasis (e.g. to show the mappings between \
        different planes).
    as_subplot : bool
        Whether the grid is plotted as part of a subplot, in which case the grid figure is not opened / closed.
    units : str
        The units of the y / x axis of the plots, in arc-seconds ('arcsec') or kiloparsecs ('kpc').
    kpc_per_arcsec : float
        The conversion factor between arc-seconds and kiloparsecs, required to plot the units in kpc.
    figsize : (int, int)
        The size of the figure in (rows, columns).
    pointsize : int
        The size of the points plotted on the grid.
    xyticksize : int
        The font size of the x and y ticks on the figure axes.
    title : str
        The text of the title.
    titlesize : int
        The size of of the title of the figure.
    xlabelsize : int
        The fontsize of the x axes label.
    ylabelsize : int
        The fontsize of the y axes label.
    output_path : str
        The path on the hard-disk where the figure is output.
    output_filename : str
        The filename of the figure that is output.
    output_format : str
        The format the figue is output:
        'show' - display on computer screen.
        'png' - output to hard-disk as a png.
    """

    plotter_util.setup_figure(figsize=figsize, as_subplot=as_subplot)
    grid = convert_grid_units(grid_arcsec=grid,
                              units=units,
                              kpc_per_arcsec=kpc_per_arcsec)

    if colors is not None:

        plt.cm.get_cmap(cmap)

    plt.scatter(
        y=np.asarray(grid[:, 0]),
        x=np.asarray(grid[:, 1]),
        c=colors,
        s=pointsize,
        marker=".",
        cmap=cmap,
    )

    if colors is not None:

        plotter_util.set_colorbar(
            cb_ticksize=cb_ticksize,
            cb_fraction=cb_fraction,
            cb_pad=cb_pad,
            cb_tick_values=cb_tick_values,
            cb_tick_labels=cb_tick_labels,
        )

    plotter_util.set_title(title=title, titlesize=titlesize)
    set_xy_labels(
        units=units,
        kpc_per_arcsec=kpc_per_arcsec,
        xlabelsize=xlabelsize,
        ylabelsize=ylabelsize,
        xyticksize=xyticksize,
    )

    set_axis_limits(
        axis_limits=axis_limits,
        grid=grid,
        symmetric_around_centre=symmetric_around_centre,
    )
    plot_points(grid=grid, points=points, pointcolor=pointcolor)
    plotter_util.plot_lines(line_lists=lines)

    plt.tick_params(labelsize=xyticksize)
    plotter_util.output_figure(
        array=None,
        as_subplot=as_subplot,
        output_path=output_path,
        output_filename=output_filename,
        output_format=output_format,
    )
    plotter_util.close_figure(as_subplot=as_subplot)