def figures_1d(self, convergence: bool = False, potential: bool = False): """ Plots the individual attributes of the plotter's `MassProfile` object in 1D, which are computed via the plotter's grid object. If the plotter has a 1D grid object this is used to evaluate each quantity. If it has a 2D grid, a 1D grid is computed from the mass profile. This is performed by aligning a 1D grid with the major-axis of the mass profile in projection, uniformly computing 1D values based on the 2D grid's size and pixel-scale. The API is such that every plottable attribute of the `MassProfile` object is an input parameter of type bool of the function, which if switched to `True` means that it is plotted. Parameters ---------- convergence Whether or not to make a 1D plot (via `imshow`) of the convergence. potential Whether or not to make a 1D plot (via `imshow`) of the potential. """ if self.mat_plot_1d.yx_plot.plot_axis_type is None: plot_axis_type_override = "semilogy" else: plot_axis_type_override = None if convergence: convergence_1d = self.mass_profile.convergence_1d_from(grid=self.grid) self.mat_plot_1d.plot_yx( y=convergence_1d, x=convergence_1d.grid_radial, visuals_1d=self.get_visuals_1d(), auto_labels=aplt.AutoLabels( title="Convergence vs Radius", ylabel="Convergence ", xlabel="Radius", legend=self.mass_profile.__class__.__name__, filename="convergence_1d", ), plot_axis_type_override=plot_axis_type_override, ) if potential: potential_1d = self.mass_profile.potential_1d_from(grid=self.grid) self.mat_plot_1d.plot_yx( y=potential_1d, x=potential_1d.grid_radial, visuals_1d=self.get_visuals_1d(), auto_labels=aplt.AutoLabels( title="Potential vs Radius", ylabel="Potential ", xlabel="Radius", legend=self.mass_profile.__class__.__name__, filename="potential_1d", ), plot_axis_type_override=plot_axis_type_override, )
def figures_2d( self, image: bool = False, convergence: bool = False, potential: bool = False, deflections_y: bool = False, deflections_x: bool = False, magnification: bool = False, contribution_map: bool = False, ): """ Plots the individual attributes of the plotter's `Galaxy` object in 2D, which are computed via the plotter's 2D grid object. The API is such that every plottable attribute of the `Galaxy` object is an input parameter of type bool of the function, which if switched to `True` means that it is plotted. Parameters ---------- image Whether or not to make a 2D plot (via `imshow`) of the image. convergence Whether or not to make a 2D plot (via `imshow`) of the convergence. potential Whether or not to make a 2D plot (via `imshow`) of the potential. deflections_y Whether or not to make a 2D plot (via `imshow`) of the y component of the deflection angles. deflections_x Whether or not to make a 2D plot (via `imshow`) of the x component of the deflection angles. magnification Whether or not to make a 2D plot (via `imshow`) of the magnification. contribution_map Whether or not to make a 2D plot (via `imshow`) of the contribution map. """ if image: self.mat_plot_2d.plot_array( array=self.galaxy.image_2d_from(grid=self.grid), visuals_2d=self.get_visuals_2d(), auto_labels=aplt.AutoLabels(title="Image", filename="image_2d"), ) self._mass_plotter.figures_2d( convergence=convergence, potential=potential, deflections_y=deflections_y, deflections_x=deflections_x, magnification=magnification, ) if contribution_map: self.mat_plot_2d.plot_array( array=self.galaxy.contribution_map, visuals_2d=self.get_visuals_2d(), auto_labels=aplt.AutoLabels( title="Contribution Map", filename="contribution_map_2d" ), )
def subplot( self, image: bool = False, plane_image: bool = False, plane_grid: bool = False, convergence: bool = False, potential: bool = False, deflections_y: bool = False, deflections_x: bool = False, magnification: bool = False, contribution_map: bool = False, auto_filename: str = "subplot_plane", ): """ Plots the individual attributes of the plotter's `Plane` object in 2D on a subplot, which are computed via the plotter's 2D grid object. The API is such that every plottable attribute of the `Plane` object is an input parameter of type bool of the function, which if switched to `True` means that it is included on the subplot. Parameters ---------- image Whether or not to include a 2D plot (via `imshow`) of the image of plane in its image-plane (e.g. after lensing). plane_image Whether or not to include a 2D plot (via `imshow`) of the image of the plane in the soure-plane (e.g. its unlensed light). convergence Whether or not to include a 2D plot (via `imshow`) of the convergence. potential Whether or not to include a 2D plot (via `imshow`) of the potential. deflections_y Whether or not to include a 2D plot (via `imshow`) of the y component of the deflection angles. deflections_x Whether or not to include a 2D plot (via `imshow`) of the x component of the deflection angles. magnification Whether or not to include a 2D plot (via `imshow`) of the magnification. contribution_map Whether or not to include a 2D plot (via `imshow`) of the contribution map. auto_filename The default filename of the output subplot if written to hard-disk. """ self._subplot_custom_plot( image=image, plane_image=plane_image, plane_grid=plane_grid, convergence=convergence, potential=potential, deflections_y=deflections_y, deflections_x=deflections_x, magnification=magnification, contribution_map=contribution_map, auto_labels=aplt.AutoLabels(filename=auto_filename), )
def figure_contribution_map(self, contribution_map: aa.Array2D): """ Plot the contribution map of a hyper galaxy. Parameters ----------- contribution_map The contribution map that is plotted. """ self.mat_plot_2d.plot_array( array=contribution_map, visuals_2d=self.get_visuals_2d(), auto_labels=aplt.AutoLabels(title="Contribution Map", filename="contribution_map_2d"), )
def figure_hyper_galaxy_image(self, galaxy_image: aa.Array2D): """ Plot the hyper galaxy image of a hyper galaxy. Parameters ----------- galaxy_image The hyper galaxy image that is plotted. """ self.mat_plot_2d.plot_array( array=galaxy_image, visuals_2d=self.get_visuals_2d(), auto_labels=aplt.AutoLabels(title="Hyper Galaxy Image", filename="hyper_galaxy_image"), )
def figures_2d(self, image: bool = False): """ Plots the individual attributes of the plotter's `LightProfile` object in 2D, which are computed via the plotter's 2D grid object. The API is such that every plottable attribute of the `LightProfile` object is an input parameter of type bool of the function, which if switched to `True` means that it is plotted. Parameters ---------- image Whether or not to make a 2D plot (via `imshow`) of the image. """ if image: self.mat_plot_2d.plot_array( array=self.light_profile.image_2d_from(grid=self.grid), visuals_2d=self.get_visuals_2d(), auto_labels=aplt.AutoLabels(title="Image", filename="image_2d"), )
def figures_1d(self, image: bool = False): """ Plots the individual attributes of the plotter's list of ` LightProfile` object in 1D, which are computed via the plotter's grid object. This averages over a list light profiles to compute the average value of each attribute with errors, where the 1D regions within the errors are plotted as a shaded region to show the range of plausible models. Therefore, the input list of galaxies is expected to represent the probability density function of an inferred model-fit. If the plotter has a 1D grid object this is used to evaluate each quantity. If it has a 2D grid, a 1D grid is computed from each light profile. This is performed by aligning a 1D grid with the major-axis of each light profile in projection, uniformly computing 1D values based on the 2D grid's size and pixel-scale. The API is such that every plottable attribute of the `LightProfile` object is an input parameter of type bool of the function, which if switched to `True` means that it is plotted. Parameters ---------- image Whether or not to make a 1D plot (via `plot`) of the image. convergence Whether or not to make a 1D plot (via `imshow`) of the convergence. potential Whether or not to make a 1D plot (via `imshow`) of the potential. """ if self.mat_plot_1d.yx_plot.plot_axis_type is None: plot_axis_type_override = "semilogy" else: plot_axis_type_override = None if image: grid_radial = (self.light_profile_pdf_list[0].image_1d_from( grid=self.grid).grid_radial) image_1d_list = [ light_profile.image_1d_from(grid=self.grid) for light_profile in self.light_profile_pdf_list ] median_image_1d, errors_image_1d = error_util.profile_1d_median_and_error_region_via_quantile( profile_1d_list=image_1d_list, low_limit=self.low_limit) visuals_1d_via_light_obj_list = self.get_1d.via_light_obj_list_from( light_obj_list=self.light_profile_pdf_list, low_limit=self.low_limit) visuals_1d_with_shaded_region = self.visuals_1d.__class__( shaded_region=errors_image_1d) visuals_1d = visuals_1d_via_light_obj_list + visuals_1d_with_shaded_region self.mat_plot_1d.plot_yx( y=median_image_1d, x=grid_radial, visuals_1d=visuals_1d, auto_labels=aplt.AutoLabels( title="Image vs Radius", ylabel="Image", xlabel="Radius", legend=self.light_profile_pdf_list[0].__class__.__name__, filename="image_1d", ), plot_axis_type_override=plot_axis_type_override, )
def figures_2d( self, image: bool = False, plane_image: bool = False, plane_grid: bool = False, convergence: bool = False, potential: bool = False, deflections_y: bool = False, deflections_x: bool = False, magnification: bool = False, contribution_map: bool = False, title_suffix: str = "", filename_suffix: str = "", ): """ Plots the individual attributes of the plotter's `Plane` object in 2D, which are computed via the plotter's 2D grid object. The API is such that every plottable attribute of the `Plane` object is an input parameter of type bool of the function, which if switched to `True` means that it is plotted. Parameters ---------- image Whether or not to make a 2D plot (via `imshow`) of the image of plane in its image-plane (e.g. after lensing). plane_image Whether or not to make a 2D plot (via `imshow`) of the image of the plane in the soure-plane (e.g. its unlensed light). convergence Whether or not to make a 2D plot (via `imshow`) of the convergence. potential Whether or not to make a 2D plot (via `imshow`) of the potential. deflections_y Whether or not to make a 2D plot (via `imshow`) of the y component of the deflection angles. deflections_x Whether or not to make a 2D plot (via `imshow`) of the x component of the deflection angles. magnification Whether or not to make a 2D plot (via `imshow`) of the magnification. contribution_map Whether or not to make a 2D plot (via `imshow`) of the contribution map. title_suffix Add a suffix to the end of the matplotlib title label. filename_suffix Add a suffix to the end of the filename the plot is saved to hard-disk using. """ if image: self.mat_plot_2d.plot_array( array=self.plane.image_2d_from(grid=self.grid), visuals_2d=self.get_visuals_2d(), auto_labels=aplt.AutoLabels( title=f"Image{title_suffix}", filename=f"image_2d{filename_suffix}" ), ) if plane_image: self.mat_plot_2d.plot_array( array=self.plane.plane_image_2d_from(grid=self.grid).array, visuals_2d=self.get_visuals_2d(), auto_labels=aplt.AutoLabels( title=f"Plane Image{title_suffix}", filename=f"plane_image{filename_suffix}", ), ) if plane_grid: self.mat_plot_2d.plot_grid( grid=self.grid, visuals_2d=self.get_visuals_2d(), auto_labels=aplt.AutoLabels( title=f"Plane Grid2D{title_suffix}", filename=f"plane_grid{filename_suffix}", ), ) self._mass_plotter.figures_2d( convergence=convergence, potential=potential, deflections_y=deflections_y, deflections_x=deflections_x, magnification=magnification, ) if contribution_map: self.mat_plot_2d.plot_array( array=self.plane.contribution_map, visuals_2d=self.get_visuals_2d(), auto_labels=aplt.AutoLabels( title="Contribution Map", filename="contribution_map_2d" ), )
def figures_2d( self, convergence: bool = False, potential: bool = False, deflections_y: bool = False, deflections_x: bool = False, magnification: bool = False, ): """ Plots the individual attributes of the plotter's mass object in 2D, which are computed via the plotter's 2D grid object. The API is such that every plottable attribute of the `Imaging` object is an input parameter of type bool of the function, which if switched to `True` means that it is plotted. Parameters ---------- convergence Whether or not to make a 2D plot (via `imshow`) of the convergence. potential Whether or not to make a 2D plot (via `imshow`) of the potential. deflections_y Whether or not to make a 2D plot (via `imshow`) of the y component of the deflection angles. deflections_x Whether or not to make a 2D plot (via `imshow`) of the x component of the deflection angles. magnification Whether or not to make a 2D plot (via `imshow`) of the magnification. """ if convergence: self.mat_plot_2d.plot_array( array=self.mass_obj.convergence_2d_from(grid=self.grid), visuals_2d=self.get_visuals_2d(), auto_labels=aplt.AutoLabels( title="Convergence", filename="convergence_2d" ), ) if potential: self.mat_plot_2d.plot_array( array=self.mass_obj.potential_2d_from(grid=self.grid), visuals_2d=self.get_visuals_2d(), auto_labels=aplt.AutoLabels(title="Potential", filename="potential_2d"), ) if deflections_y: deflections = self.mass_obj.deflections_yx_2d_from(grid=self.grid) deflections_y = aa.Array2D.manual_mask( array=deflections.slim[:, 0], mask=self.grid.mask ) self.mat_plot_2d.plot_array( array=deflections_y, visuals_2d=self.get_visuals_2d(), auto_labels=aplt.AutoLabels( title="Deflections Y", filename="deflections_y_2d" ), ) if deflections_x: deflections = self.mass_obj.deflections_yx_2d_from(grid=self.grid) deflections_x = aa.Array2D.manual_mask( array=deflections.slim[:, 1], mask=self.grid.mask ) self.mat_plot_2d.plot_array( array=deflections_x, visuals_2d=self.get_visuals_2d(), auto_labels=aplt.AutoLabels( title="deflections X", filename="deflections_x_2d" ), ) if magnification: self.mat_plot_2d.plot_array( array=self.mass_obj.magnification_2d_from(grid=self.grid), visuals_2d=self.get_visuals_2d(), auto_labels=aplt.AutoLabels( title="Magnification", filename="magnification_2d" ), )