Visualising Solver Results
All QuTiP solvers return result objects that include built-in plotting methods. These make it easy to quickly inspect expectation values without writing boilerplate matplotlib code.
Basic Usage
After running any solver, call plot_expect
on the result:
import qutip
import numpy as np
H = qutip.num(5)
psi0 = qutip.basis(5, 4)
tlist = np.linspace(0, 10, 100)
a = qutip.destroy(5)
result = qutip.mesolve(H, psi0, tlist, [0.5 * a],
e_ops=[a.dag() * a])
result.plot_expect()
Dictionary Labels
When e_ops is passed as a dictionary, the keys are used as legend labels
automatically:
result = qutip.mesolve(H, psi0, tlist, [0.5 * a],
e_ops={"photons": a.dag() * a,
"field": a + a.dag()})
result.plot_expect()
Separate Subplots
To plot each expectation value in its own subplot, use separate_axes=True:
result.plot_expect(separate_axes=True)
Monte Carlo Trajectories
For Monte Carlo results
(McResult),
individual trajectories can be overlaid on the average:
result = qutip.mcsolve(H, psi0, tlist, [0.5 * a],
e_ops=[a.dag() * a],
ntraj=50,
options={"keep_runs_results": True})
# Show 10 trajectories behind the average
result.plot_expect(show_trajectories=10)
Trajectory styling can be customised:
result.plot_expect(
show_trajectories=10,
trajectory_kwargs={"color": "blue", "alpha": 0.1},
)
Photocurrent
Monte Carlo results also support plotting the photocurrent:
result.plot_photocurrent()
Customisation
All methods accept fig and axes keyword arguments for embedding
plots in custom layouts:
import matplotlib.pyplot as plt
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))
result.plot_expect(axes=ax1, title="Expectation values")
result.plot_photocurrent(axes=ax2, title="Photocurrent")
plt.tight_layout()
Other options include title, xlabel, ylabel, labels,
and show_legend.