visplot#

class cryocat.analysis.visplot.BaseBuilder(input_data, input_data_id=None, colors=None, separate_graphs=False, same_range_for_separate=True, opacity=None, grid_spec='column', color_type='palette')#

Bases: object

build_trace(*args, **kwargs)#
change_to_separate_graphs(message='', opacity=None, grid_spec='column')#
plot_graph(*args, **kwargs)#
plot_single(*args, **kwargs)#
plot_subplots(*args, **kwargs)#
process_second_axis_data(second_axis_data, second_axis_id, x_id='x')#
update_graph_layout(**layout_setup)#
update_layout_settings(**layout_setup)#

Update self.default_layout with overrides, keeping old values.

class cryocat.analysis.visplot.Defaults(template: 'str' = 'plotly_white', height: 'int' = 500, width: 'Optional[int]' = None, showlegend: 'bool' = True, margin: 'dict' = <factory>, font_family: 'str' = 'Arial, sans-serif', font_size: 'int' = 14, colorway: 'Union[str, Sequence[Color]]' = 'Plotly', colorscale: 'Union[str, Colorscale, Sequence[Color]]' = 'Viridis', extra_layout: 'dict' = <factory>)#

Bases: object

colorscale = 'Viridis'#
colorway = 'Plotly'#
extra_layout#
font_family = 'Arial, sans-serif'#
font_size = 14#
height = 500#
margin#
showlegend = True#
template = 'plotly_white'#
to_layout_kwargs()#

Convert defaults into fig.update_layout kwargs (resolving names).

width = None#
class cryocat.analysis.visplot.Hist2DBuilder(input_data, input_data_id=None, second_axis_data=None, second_axis_id=None, nbinsx=40, nbinsy=40, x_range=None, y_range=None, hist_type='count', hist_norm=None, same_scale=False, colors=None, separate_graphs=False, same_range_for_separate=True, opacity=None, grid_spec='column')#

Bases: BaseBuilder

build_trace(x, y, name, xbins, ybins)#
plot_single(*args, **kwargs)#
plot_subplots(*args, **kwargs)#
prepare_trace_kwargs(showscale=None, coloraxis=None, colorbar=None)#
class cryocat.analysis.visplot.HistBuilder(input_data, input_data_id=None, bins=20, hist_type='count', hist_norm='', opacity=None, colors=None, x_range=None, separate_graphs=False, same_range_for_separate=True, same_scale=False, grid_spec='column')#

Bases: BaseBuilder

build_trace(y, name, color, x_range, xbins)#
plot_single()#
plot_subplots()#
class cryocat.analysis.visplot.KDEBuilder(input_data, input_data_id=None, second_axis_data=None, second_axis_id=None, nbinsx=200, nbinsy=200, x_range=None, y_range=None, hist_type='count', hist_norm=None, same_scale=False, colors=None, same_range_for_separate=True, opacity=None, grid_spec='column')#

Bases: Hist2DBuilder

build_trace(x_grid, y_grid, z_grid, zmax)#
compute_kde(x_axis, y_axis)#
list_max(same_scale=False)#
normalize_ranges(ranges)#
padded_limits(v, frac=0.05, min_pad=0.0, bw=None, k_bw=3.0)#
plot_single(*args, **kwargs)#
plot_subplots(*args, **kwargs)#
class cryocat.analysis.visplot.ScatterBuilder(input_data, input_data_id=None, second_axis_data=None, second_axis_id=None, line_mode='markers', x_range=None, y_range=None, colors=None, separate_graphs=False, same_range_for_separate=True, opacity=None, grid_spec='column')#

Bases: BaseBuilder

build_trace(x, y, name, color)#
plot_single(*args, **kwargs)#
plot_subplots(*args, **kwargs)#
cryocat.analysis.visplot.apply_defaults(fig, **layout_overrides)#

Apply global defaults to an existing figure, with optional overrides.

cryocat.analysis.visplot.convert_color_scheme(num_colors, color_scheme=None)#
cryocat.analysis.visplot.convert_to_radial(coordinates, replace_nan=True)#
cryocat.analysis.visplot.convert_to_spherical(coordinates)#
cryocat.analysis.visplot.create_projection(coord, projection_type='stereo', split_into_hemispheres=True)#
cryocat.analysis.visplot.create_smooth_polar_histogram(ax, histogram, hist_norm_value=None, colormap='viridis_r')#
cryocat.analysis.visplot.fill_wedge(r1, r2, theta1, theta2, theta_step, **kargs)#
cryocat.analysis.visplot.format_input_data(input_data, input_data_id, n_columns)#
cryocat.analysis.visplot.format_input_data_id(input_data, input_data_id, default_name='Value')#
cryocat.analysis.visplot.get_colors_from_palette(num_colors, pallete_name='tab10')#

Generate a list of color codes in hexadecimal format from a specified color palette.

Parameters:
num_colorsint

The number of distinct colors to generate.

pallete_namestr, optional

The name of the color palette to use (default is “tab10”).

Returns:
list of str

A list containing the hexadecimal color codes.

Examples

>>> get_colors_from_palette(3)
['#1f77b4', '#ff7f0e', '#2ca02c']
>>> get_colors_from_palette(5, pallete_name="viridis")
['#440154', '#3b528b', '#21918c', '#5ec962', '#fde725']
cryocat.analysis.visplot.plot_alignment_stability(input_dfs, labels=None, graph_title='Alignment stability', output_file=None)#
cryocat.analysis.visplot.plot_class_occupancy(occupancy_dic, color_scheme=None, ax=None, show_legend=True, graph_title=None, output_file=None)#
cryocat.analysis.visplot.plot_class_stability(subtomo_changes, color_scheme=None, ax=None, show_legend=True, graph_title=None, output_file=None)#
cryocat.analysis.visplot.plot_classification_convergence(occupancy_dic, subtomo_changes_dic, color_scheme=None, graph_title=None, output_file=None)#
cryocat.analysis.visplot.plot_fsc(input_data, pixel_size=None, box_size=None, output_path=None)#

Plot a Fourier Shell Correlation (FSC) curve using Plotly.

Parameters:
input_datastr or pandas.DataFrame

Data source. Accepted formats:

.csv

Must contain a column x and one or more of uncorrected_fsc, corrected_fsc, mean_phase_fsc.

.xml

ChimeraX-compatible FSC XML (<coordinate><x>/<y>).

.txt

Single-column file of FSC values. Requires pixel_size and box_size to compute the x-axis.

pandas.DataFrame

Same column convention as .csv.

pixel_sizefloat, optional

Pixel size in Angstroms. Used to label the x-axis 1/Å and required when input_data is a .txt file.

box_sizeint, optional

Box edge length in voxels. Required when input_data is a .txt file.

output_pathstr, optional

File path for saving the figure. .html produces an interactive Plotly file; any other extension uses fig.write_image() (requires the kaleido package).

Returns:
plotly.graph_objects.Figure
cryocat.analysis.visplot.plot_histogram(input_data, input_data_id, bins=20, separate_graphs=False, hist_type='count', hist_norm='', same_range_for_separate=True, same_scale=False, colors=None, opacity=None, grid_spec='column')#
cryocat.analysis.visplot.plot_histogram2D(input_data, input_data_id=None, second_axis_data=None, second_axis_id=None, nbinsx=40, nbinsy=40, x_range=None, y_range=None, hist_type='count', hist_norm=None, same_scale=False, colors=None, separate_graphs=False, same_range_for_separate=True, opacity=None, grid_spec='column')#
cryocat.analysis.visplot.plot_kde(input_data, input_data_id=None, second_axis_data=None, second_axis_id=None, nbinsx=200, nbinsy=200, hist_type='count', hist_norm=None, colors=None, opacity=None, grid_spec='column', same_range_for_separate=False, same_scale=False)#
cryocat.analysis.visplot.plot_kernel_density_estimation(input_data, input_data_id=None, nbinsx=200, nbinsy=200, colors=None)#
cryocat.analysis.visplot.plot_line(input_data, input_data_id, separate_graphs=False, same_range_for_separate=False, colors=None, opacity=None, grid_spec='column')#
cryocat.analysis.visplot.plot_orientational_distribution(coordinates, projection='stereo', graph_title=None, theta_bin=73, radius_bin=33, max_radius=None, colormap='viridis_r', output_file=None, show=True)#
cryocat.analysis.visplot.plot_pca_summary(cumulative_variance, feature_importances, scatter_kwargs=None, bar_kwargs=None)#

Create a combined subplot fro PCA analysis: - Cumulative explained variance (line plot) - Feature importance (horizontal bar plot)

Parameters:
cumulative_variancendarray

Values of cumulative explained variance.

feature_importancespd.Series

Series of feature importance (e.g., squared loadings) from PCA.

Returns:
figplotly.graph_objects.Figure

Combined plotly figure.

cryocat.analysis.visplot.plot_polar_nn_distances(coordinates, distances, max_radius=None, marker_size=3, colormap='viridis_r', graph_title=None, output_file=None)#
cryocat.analysis.visplot.plot_scatter2D(input_data, input_data_id, second_axis_data=None, second_axis_id=None, separate_graphs=False, same_range_for_separate=False, x_range=None, y_range=None, colors=None, opacity=None, grid_spec='column')#
cryocat.analysis.visplot.plot_spherical_density(data, num_bins=10, mode='density', title='Spherical Histogram', phi_edges=None, theta_edges=None, colorscale='Viridis')#
cryocat.analysis.visplot.plot_spherical_density_hist2d(input_data, input_data_id=None, nbinsx=10, nbinsy=10, x_range=None, y_range=None, hist_type='count', hist_norm='percent', normalize_coord=True, colors='Viridis', same_scale=False, same_range_for_separate=False, grid_spec='column')#
cryocat.analysis.visplot.project_equidistant(coord)#
cryocat.analysis.visplot.project_lambert(coord)#
cryocat.analysis.visplot.project_points_on_sphere(coord, projection_type='stereo')#
cryocat.analysis.visplot.project_stereo(coord)#
cryocat.analysis.visplot.px_defaults(**overrides)#

Kwargs to pass into Plotly Express functions.

cryocat.analysis.visplot.register_colorscale(name, hex_colors)#

Register a continuous colorscale from a list of colors (stops spread evenly).

cryocat.analysis.visplot.register_palette(name, colors)#

Register a discrete palette (used for categorical colorway).

cryocat.analysis.visplot.resolve_colors_any(spec=None, *, color_type='palette', n=None)#
cryocat.analysis.visplot.resolve_colorscale(spec)#

Return a Plotly colorscale [(pos,color),…] from name or explicit input.

cryocat.analysis.visplot.resolve_palette(spec)#

Return a list of colors given a name or explicit sequence.

cryocat.analysis.visplot.scatter_with_histogram(data_x, data_y, bins_x=None, bins_y=None, colors_x=None, colors_y=None, edges_x=None, edges_y=None, axis_title_x=None, axis_title_y=None, output_file=None)#
cryocat.analysis.visplot.set_defaults(**kwargs)#

Update global DEFAULTS. Nested ‘extra_layout’ is merged (shallow).

cryocat.analysis.visplot.use_defaults(**overrides)#

Temporarily override DEFAULTS inside a ‘with’ block.