def set_xy_labels(units, kpc_per_arcsec, xlabelsize, ylabelsize, xyticksize): """Set the x and y labels of the figure, and set the fontsize of those labels. The x and y labels are always the distance scales, thus the labels are either arc-seconds or kpc and depend on the \ units the figure is plotted in. Parameters ----------- 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. 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. """ if units in 'arcsec' or kpc_per_arcsec is None: plt.xlabel('x (arcsec)', fontsize=xlabelsize) plt.ylabel('y (arcsec)', fontsize=ylabelsize) elif units in 'kpc': plt.xlabel('x (kpc)', fontsize=xlabelsize) plt.ylabel('y (kpc)', fontsize=ylabelsize) else: raise exc.PlottingException( 'The units supplied to the plotted are not a valid string (must be pixels | ' 'arcsec | kpc)') plt.tick_params(labelsize=xyticksize)
def convert_grid_units(array, grid_arcsec, units, kpc_per_arcsec): """Convert the grid from its input units (arc-seconds) to the input unit (e.g. retain arc-seconds) or convert to \ another set of units (pixels or kilo parsecs). Parameters ----------- array : data_type.array.scaled_array.ScaledArray The 2D array of data_type which is plotted, the shape of which is used for converting the grid to units of pixels. grid_arcsec : ndarray or data_type.array.grids.Grid The (y,x) coordinates of the grid in arc-seconds, in an array of shape (total_coordinates, 2). 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. """ if units in "pixels": return array.grid_arcsec_to_grid_pixels(grid_arcsec=grid_arcsec) elif units in "arcsec" or kpc_per_arcsec is None: return grid_arcsec elif units in "kpc": return grid_arcsec * kpc_per_arcsec else: raise exc.PlottingException( "The units supplied to the plotter are not a valid string (must be pixels | " "arcsec | kpc)")
def get_normalization_scale(norm, norm_min, norm_max, linthresh, linscale): """Get the normalization scale of the colormap. This will be scaled based on the input min / max normalization \ values. For a 'symmetric_log' colormap, linthesh and linscale also change the colormap. If norm_min / norm_max are not supplied, the minimum / maximum values of the array of data are used. Parameters ----------- array : data.array.scaled_array.ScaledArray The 2D array of data which is plotted. 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. """ if norm is 'linear': return colors.Normalize(vmin=norm_min, vmax=norm_max) elif norm is 'log': if norm_min == 0.0: norm_min = 1.e-4 return colors.LogNorm(vmin=norm_min, vmax=norm_max) elif norm is 'symmetric_log': return colors.SymLogNorm(linthresh=linthresh, linscale=linscale, vmin=norm_min, vmax=norm_max) else: raise exc.PlottingException('The normalization (norm) supplied to the plotter is not a valid string (must be ' 'linear | log | symmetric_log')
def get_extent(array, units, kpc_per_arcsec, xticks_manual, yticks_manual): """Get the extent of the dimensions of the array in the units of the figure (e.g. arc-seconds or kpc). This is used to set the extent of the array and thus the y / x axis limits. Parameters ----------- array : data.array.scaled_array.ScaledArray The 2D array of data which is plotted. 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. 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. """ if xticks_manual is not None and yticks_manual is not None: return np.asarray([xticks_manual[0], xticks_manual[3], yticks_manual[0], yticks_manual[3]]) if units in 'pixels': return np.asarray([0, array.shape[1], 0, array.shape[0]]) elif units in 'arcsec' or kpc_per_arcsec is None: return np.asarray([array.arc_second_minima[1], array.arc_second_maxima[1], array.arc_second_minima[0], array.arc_second_maxima[0]]) elif units in 'kpc': return list(map(lambda tick : tick*kpc_per_arcsec, np.asarray([array.arc_second_minima[1], array.arc_second_maxima[1], array.arc_second_minima[0], array.arc_second_maxima[0]]))) else: raise exc.PlottingException('The units supplied to the plotted are not a valid string (must be pixels | ' 'arcsec | kpc)')
def set_colorbar(cb_ticksize, cb_fraction, cb_pad, cb_tick_values, cb_tick_labels): """Setup the colorbar of the figure, specifically its ticksize and the size is appears relative to the figure. Parameters ----------- 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. cb_tick_values : [float] Manually specified values of where the colorbar tick labels appear on the colorbar. cb_tick_labels : [float] Manually specified labels of the color bar tick labels, which appear where specified by cb_tick_values. """ if cb_tick_values is None and cb_tick_labels is None: cb = plt.colorbar(fraction=cb_fraction, pad=cb_pad) elif cb_tick_values is not None and cb_tick_labels is not None: cb = plt.colorbar(fraction=cb_fraction, pad=cb_pad, ticks=cb_tick_values) cb.ax.set_yticklabels(cb_tick_labels) else: raise exc.PlottingException( "Only 1 entry of cb_tick_values or cb_tick_labels was input. You must either supply" "both the values and labels, or neither.") cb.ax.tick_params(labelsize=cb_ticksize)
def plot_y_vs_x(y, x, plot_axis_type, label): if plot_axis_type is "linear": plt.plot(x, y, label=label) elif plot_axis_type is "semilogy": plt.semilogy(x, y, label=label) elif plot_axis_type is "loglog": plt.loglog(x, y, label=label) else: raise exc.PlottingException( "The plot_axis_type supplied to the plotter is not a valid string (must be linear " "| semilogy | loglog)")
def plot_model_image_of_planes( fit, plot_foreground=False, plot_source=False, mask=None, extract_array_from_mask=False, zoom_around_mask=False, positions=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, title='Fit Model Image', titlesize=16, xlabelsize=16, ylabelsize=16, xyticksize=16, mask_pointsize=10, position_pointsize=10, output_path=None, output_format='show', output_filename='fit_model_image_of_plane'): """Plot the model image of a specific plane of a lens fit. Set *autolens.datas.array.plotters.array_plotters* for a description of all input parameters not described below. Parameters ----------- fit : datas.fitting.fitting.AbstractFitter The fit to the datas, which includes a list of every model image, residual_map, chi-squareds, etc. plane_indexes : [int] The plane from which the model image is generated. """ if plot_foreground: if fit.tracer.total_planes == 2: model_image = fit.model_image_of_planes[0] else: model_image = sum(fit.model_image_of_planes[0:-2]) elif plot_source: model_image = fit.model_image_of_planes[-1] else: raise exc.PlottingException('Both plot_foreground and plot_source were False, one must be True') array_plotters.plot_array( array=model_image, mask=mask, extract_array_from_mask=extract_array_from_mask, zoom_around_mask=zoom_around_mask, positions=positions, 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, cb_ticksize=cb_ticksize, cb_fraction=cb_fraction, cb_pad=cb_pad, title=title, titlesize=titlesize, xlabelsize=xlabelsize, ylabelsize=ylabelsize, xyticksize=xyticksize, mask_pointsize=mask_pointsize, position_pointsize=position_pointsize, output_path=output_path, output_format=output_format, output_filename=output_filename)
def plot_vertical_lines(vertical_lines, vertical_line_labels, units, kpc_per_arcsec): if vertical_lines is [] or vertical_lines is None: return for vertical_line, vertical_line_label in zip(vertical_lines, vertical_line_labels): if units in "arcsec" or kpc_per_arcsec is None: x_value_plot = vertical_line elif units in "kpc": x_value_plot = vertical_line else: raise exc.PlottingException( "The units supplied to the plotter are not a valid string (must be pixels | " "arcsec | kpc)") plt.axvline(x=x_value_plot, label=vertical_line_label, linestyle="--")
def set_xy_labels_and_ticksize(units, kpc_per_arcsec, ylabel, xlabelsize, ylabelsize, xyticksize): """Set the x and y labels of the figure, and set the fontsize of those labels. The x label is always the distance scale / radius, thus the x-label is either arc-seconds or kpc and depending \ on the units the figure is plotted in. The ylabel is the physical quantity being plotted and is passed as an input parameter. Parameters ----------- 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. ylabel : str The y-label of the figure, which is the physical quantitiy being plotted. 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. """ plt.ylabel(ylabel=ylabel, fontsize=ylabelsize) if units in "arcsec" or kpc_per_arcsec is None: plt.xlabel("x (arcsec)", fontsize=xlabelsize) elif units in "kpc": plt.xlabel("x (kpc)", fontsize=xlabelsize) else: raise exc.PlottingException( "The units supplied to the plotter are not a valid string (must be pixels | " "arcsec | kpc)") plt.tick_params(labelsize=xyticksize)
def output_subplot_array(output_path, output_filename, output_format): """Output a figure which consists of a set of subplot,, either as an image on the screen or to the hard-disk as a \ .png file. Parameters ----------- 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. """ if output_format is 'show': plt.show() elif output_format is 'png': plt.savefig(output_path + output_filename + '.png', bbox_inches='tight') elif output_format is 'fits': raise exc.PlottingException( 'You cannot output a subplots with format .fits')
def plot_galaxy_data_array( galaxy_data, mask=None, extract_array_from_mask=False, zoom_around_mask=False, positions=None, as_subplot=False, units="arcsec", kpc_per_arcsec=None, figsize=None, 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, titlesize=10, xlabelsize=10, ylabelsize=10, xyticksize=10, mask_pointsize=10, position_pointsize=10.0, grid_pointsize=1, output_path=None, output_filename="galaxy_data", output_format="show", ): if galaxy_data.use_image: title = "Galaxy Data Image" elif galaxy_data.use_convergence: title = "Galaxy Data Convergence" elif galaxy_data.use_potential: title = "Galaxy Data Potential" elif galaxy_data.use_deflections_y: title = "Galaxy Data Deflections (y)" elif galaxy_data.use_deflections_x: title = "Galaxy Data Deflections (x)" else: raise exc.PlottingException( "The galaxy data_type array does not have a True use_profile_type") array_plotters.plot_array( array=galaxy_data.image(return_in_2d=True), mask=mask, extract_array_from_mask=extract_array_from_mask, zoom_around_mask=zoom_around_mask, positions=positions, 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, 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, mask_pointsize=mask_pointsize, position_pointsize=position_pointsize, grid_pointsize=grid_pointsize, output_path=output_path, output_format=output_format, output_filename=output_filename, )
def plot_galaxy_data_array(galaxy_data, mask=None, extract_array_from_mask=False, zoom_around_mask=False, positions=None, as_subplot=False, units='arcsec', kpc_per_arcsec=None, figsize=None, 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, titlesize=10, xlabelsize=10, ylabelsize=10, xyticksize=10, mask_pointsize=10, position_pointsize=10.0, grid_pointsize=1, output_path=None, output_filename='galaxy_data', output_format='show'): if galaxy_data.use_intensities: title = 'Galaxy Data Intensities' elif galaxy_data.use_surface_density: title = 'Galaxy Data Surface Density' elif galaxy_data.use_potential: title = 'Galaxy Data Potential' elif galaxy_data.use_deflections_y: title = 'Galaxy Data Deflections (y)' elif galaxy_data.use_deflections_x: title = 'Galaxy Data Deflections (x)' else: raise exc.PlottingException( 'The galaxy data array does not have a True use_profile_type') array_plotters.plot_array(array=galaxy_data.image, mask=mask, extract_array_from_mask=extract_array_from_mask, zoom_around_mask=zoom_around_mask, positions=positions, 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, cb_ticksize=cb_ticksize, cb_fraction=cb_fraction, cb_pad=cb_pad, title=title, titlesize=titlesize, xlabelsize=xlabelsize, ylabelsize=ylabelsize, xyticksize=xyticksize, mask_pointsize=mask_pointsize, position_pointsize=position_pointsize, grid_pointsize=grid_pointsize, output_path=output_path, output_format=output_format, output_filename=output_filename)