Plotting the posteriors (pycbc_inference_plot_posterior)

Overview

There is an executable that can plot the posteriors called pycbc_inference_plot_posterior. You can use --plot-scatter to plot a each sample as a point or --plot-density to plot a density map.

By default the plotting executables will plot all the parameters in the input file. In order to specify a different set of variables to plot, use the --parameters option. Examples for how to use this option are shown below.

By default the plotting executables will plot samples beginning at the end of the burn in. If the burn-in was skipped, then it starts from the first sample. It will then use a sample every autocorrelation length along the chain. Examples on how to plot a specific iteration or change how the thinning is performed are shown in the examples below.

You may plot a z-axis on the 2-D histograms using the --z-arg option. For a list of options use pycbc_inference_plot_posterior --help.

Plotting a specific iteration

An example of plotting the posteriors at a specific iteration:

ITER=4999
INPUT_FILE=inference.hdf
OUTPUT_FILE=scatter.png
pycbc_inference_plot_posterior \
    --iteration ${ITER} \
    --input-file ${INPUT_FILE} \
    --output-file ${OUTPUT_FILE} \
    --plot-scatter \
    --plot-marginal \
    --z-arg logplr \
    --parameters "ra*12/pi:$\alpha$ (h)" \
                 "dec*180/pi:$\delta$ (deg)" \
                 "polarization*180/pi:$\psi$ (deg)" \
                 mass1 mass2 spin1_a spin1_azimuthal spin1_polar \
                 spin2_a spin2_azimuthal spin2_polar \
                 "inclination*180/pi:$\iota$ (deg)" distance \
                 "coa_phase*180/pi:$\phi_0$ (deg)" tc

Plotting a thinned chain of samples

There are also options for thinning the chains of samples from the command line, an example starting at the 6000-th iteration and taking every 2000-th iteration until the 12000-th iteration:

THIN_START=5999
THIN_INTERVAL=2000
THIN_END=11999
INPUT_FILE=inference.hdf
OUTPUT_FILE=scatter.png
pycbc_inference_plot_posterior \
    --input-file ${INPUT_FILE} \
    --output-file ${OUTPUT_FILE} \
    --plot-scatter \
    --thin-start ${THIN_START} \
    --thin-interval ${THIN_INTERVAL} \
    --thin-end ${THIN_END} \
    --plot-marginal \
    --z-arg logplr \
    --parameters "ra*12/pi:$\alpha$ (h)" \
                 "dec*180/pi:$\delta$ (deg)" \
                 "polarization*180/pi:$\psi$ (deg)" \
                 mass1 mass2 spin1_a spin1_azimuthal spin1_polar \
                 spin2_a spin2_azimuthal spin2_polar \
                 "inclination*180/pi:$\iota$ (deg)" distance \
                 "coa_phase*180/pi:$\phi_0$ (deg)" tc

Making a movie (pycbc_inference_plot_movie)

pycbc_inference_plot_movie is an executable similar to _plot_posterior that allows you to combine plots in to a small movie. Most options for _plot_movie are the same as _plot_posterior with a few differences. Again, the plotting executables will plot all the parameters in the input file unless the option --parameters is used to specify a set of parameters that you want to see. An example plotting every 20-th iteration into a directory called “movies”:

INPUT_FILE=inference.hdf
START_SAMPLE=1
END_SAMPLE=12000
FRAME_STEP=20
OUTPUT_PREFIX=frame
NPROCESSES=10
MOVIE_FILE=~/src/pycbc/movies/movie.mp4
DPI=100

pycbc_inference_plot_movie \
    --input-file ${INPUT_FILE} \
    --start-sample ${START_SAMPLE} \
    --end-sample ${END_SAMPLE} \
    --frame-step ${FRAME_STEP} \
    --output-prefix ${OUTPUT_PREFIX} \
    --nprocesses ${NPROCESSES} \
    --movie-file ${MOVIE_FILE} \
    --cleanup \
    --plot-scatter \
    --plot-marginal \
    --z-arg snr \
    --dpi ${DPI} \
    --parameters mass1 mass2 spin1_a spin1_azimuthal spin1_polar \
                 spin2_a spin2_azimuthal spin2_polar \

This will create a 24-second movie for a selection of parameters. The option --cleanup deletes the individual frame files prefixed as specified by the variable OUTPUT_PREFIX. This is optional. For a list of options use pycbc_inference_plot_movie --help.