Visualization

The heterodyne.viz module provides a comprehensive set of plotting functions for inspecting fits, diagnosing convergence, and generating publication-quality figures. All functions return Matplotlib figure objects that can be further customised.

NLSQ Plots

plot_nlsq_fit

Overlays the best-fit model on the measured \(C_2\) matrix.

from heterodyne.viz.nlsq_plots import plot_nlsq_fit

fig = plot_nlsq_fit(result, c2_data, timestamps)
fig.savefig("nlsq_fit.png", dpi=150)

plot_residual_map

Displays the residual \(C_2^\text{data} - C_2^\text{model}\) as a 2-D heatmap. Systematic patterns indicate model deficiencies.

from heterodyne.viz.nlsq_plots import plot_residual_map

fig = plot_residual_map(result)

plot_parameter_uncertainties

Bar chart of fitted parameters with error bars from the covariance matrix.

from heterodyne.viz.nlsq_plots import plot_parameter_uncertainties

fig = plot_parameter_uncertainties(result)

plot_fit_surface

3-D surface plot comparing data and model \(C_2\) matrices.

from heterodyne.viz.nlsq_plots import plot_fit_surface

fig = plot_fit_surface(result, c2_data, timestamps)

plot_multistart_summary

Compares \(\chi^2\) and parameter values across multi-start runs.

from heterodyne.viz.nlsq_plots import plot_multistart_summary

fig = plot_multistart_summary(multistart_results)

plot_chi_squared_landscape

2-D \(\chi^2\) landscape as a function of two chosen parameters, with the optimum marked.

from heterodyne.viz.nlsq_plots import plot_chi_squared_landscape

fig = plot_chi_squared_landscape(
    model, c2_data, result,
    param_x="D0_ref", param_y="v0",
    n_grid=50,
)

CMC Plots

plot_trace

Trace plots showing sampled values vs. iteration for each chain. Essential for visual convergence assessment.

from heterodyne.viz.mcmc_plots import plot_trace

fig = plot_trace(result, params=["D0_ref", "v0", "f0"])

plot_posterior

Marginal posterior histograms with credible intervals.

from heterodyne.viz.mcmc_plots import plot_posterior

fig = plot_posterior(result, params=["D0_ref", "alpha_ref"])

plot_corner

Pairwise corner plot showing 2-D marginal posteriors and correlations.

from heterodyne.viz.mcmc_plots import plot_corner

fig = plot_corner(result, params=["D0_ref", "D0_sample", "v0"])

plot_forest

Forest plot comparing posterior intervals across parameters or shards.

from heterodyne.viz.mcmc_plots import plot_forest

fig = plot_forest(result)

plot_energy

Energy diagnostic plot showing the marginal energy distribution and BFMI values.

from heterodyne.viz.mcmc_plots import plot_energy

fig = plot_energy(result)

plot_rhat_summary

Bar chart of \(\hat{R}\) values for all parameters with threshold lines.

from heterodyne.viz.mcmc_plots import plot_rhat_summary

fig = plot_rhat_summary(result, threshold=1.01)

plot_shard_comparison

Compares posterior means across CMC shards to detect bimodality.

from heterodyne.viz.mcmc_plots import plot_shard_comparison

fig = plot_shard_comparison(shard_results)

Diagnostic Dashboards

plot_convergence_diagnostics

Combined panel showing ESS evolution, adaptation summary, and divergence scatter.

from heterodyne.viz.mcmc_diagnostics import plot_convergence_diagnostics

fig = plot_convergence_diagnostics(result)

plot_cmc_summary_dashboard

Full CMC summary dashboard combining trace plots, posteriors, R-hat summary, and shard comparison in a single multi-panel figure.

from heterodyne.viz.mcmc_dashboard import plot_cmc_summary_dashboard

fig = plot_cmc_summary_dashboard(result, shard_results=shard_results)
fig.savefig("cmc_dashboard.png", dpi=150, bbox_inches="tight")

Experimental Data Plots

These functions visualise the raw or preprocessed data before fitting.

plot_correlation

Heatmap of the measured \(C_2(t_1, t_2)\) matrix.

from heterodyne.viz.experimental_plots import plot_correlation

fig = plot_correlation(c2_data, timestamps)

plot_g1_components

Decomposes the fitted model into its three components (reference self-correlation, sample self-correlation, cross-correlation) and plots each separately.

from heterodyne.viz.experimental_plots import plot_g1_components

fig = plot_g1_components(model, result.parameters, timestamps)

plot_phi_dependence

Shows how fitted parameters (especially velocity-related ones) vary with azimuthal angle \(\phi\).

from heterodyne.viz.experimental_plots import plot_phi_dependence

fig = plot_phi_dependence(results_by_angle, phi_angles)

ArviZ Integration

For users who prefer ArviZ’s built-in plotting, convert the CMC result to an InferenceData object:

from heterodyne.optimization.cmc.results import cmc_result_to_arviz
import arviz as az

idata = cmc_result_to_arviz(result)

# Use any ArviZ plot
az.plot_trace(idata)
az.plot_pair(idata, var_names=["D0_ref", "v0"])
az.plot_ess(idata)