Source code for iq_readout.plots.metrics

"""Functions to plot the readout metrics.
"""

import numpy as np
import matplotlib.pyplot as plt


[docs] def plot_probs_prep_meas( ax: plt.Axes, probs: np.ndarray, colorbar_flag: bool = False ) -> plt.Axes: """ Plots the matrix whose element i,j corresponds to: p(measure state j | prepared state i) Parameters ---------- ax: Matplotlib axis probs: np.ndarray(N, N) Probability matrix colorbar_flag If True, adds colorbar to the figure Returns ------- ax: Matplotlib axis with the data plotted """ fidelity = 0.5 * (probs[0, 0] + probs[1, 1]) probs = probs * 100 # percentage # rotate the matrix so that the diagonal starts from top left # instead of bottom left probs = np.rot90(probs, 3) n_states = len(probs) # transpose the matrix because imshow plots it transpose heatmap = ax.imshow(probs.T, cmap="Blues", vmin=0, vmax=100) # add numbers in matrix for i in range(probs.shape[0]): for j in range(probs.shape[1]): color = "white" if n_states - 1 - i == j else "black" ax.text(i, j, f"{probs[i, j]:0.2f}", ha="center", va="center", color=color) # Add colorbar for reference if colorbar_flag: fig = ax.get_figure() colorbar = fig.colorbar(heatmap, ax=ax) colorbar.set_label("probability (%)") ax.set_xlabel("outcome") ax.set_ylabel("prepared state") ax.set_xticks(range(n_states)) ax.set_xticklabels([f"{i}" for i in range(n_states)]) ax.set_yticks(range(n_states)) ax.set_yticklabels([f"|{i}>" for i in range(n_states)][::-1]) ax.set_xlim(-0.5, n_states - 0.5) ax.set_ylim(-0.5, n_states - 0.5) ax.set_title(f"Fidelity (states 0&1) = {fidelity*100:0.2f}%") return ax