Probability-Probability Plots (ligo.skymap.plot.pp)

Axes subclass for making probability–probability (P–P) plots.

Example

You can create new P–P plot axes by passing the keyword argument projection='pp_plot' when creating new Matplotlib axes.

import ligo.skymap.plot
from matplotlib import pyplot as plt
import numpy as np

n = 100
p_values_1 = np.random.uniform(size=n) # One experiment
p_values_2 = np.random.uniform(size=n) # Another experiment
p_values_3 = np.random.uniform(size=n) # Yet another experiment

fig = plt.figure(figsize=(5, 5))
ax = fig.add_subplot(111, projection='pp_plot')
ax.add_confidence_band(n, alpha=0.95) # Add 95% confidence band
ax.add_diagonal() # Add diagonal line
ax.add_lightning(n, 20) # Add some random realizations of n samples
ax.add_series(p_values_1, p_values_2, p_values_3) # Add our data

(Source code, png, hires.png, pdf)

../_images/pp-1.png

Or, you can call the constructor of PPPlot directly.

from ligo.skymap.plot import PPPlot
from matplotlib import pyplot as plt
import numpy as np

n = 100

rect = [0.1, 0.1, 0.8, 0.8] # Where to place axes in figure
fig = plt.figure(figsize=(5, 5))
ax = PPPlot(fig, rect)
fig.add_axes(ax)
ax.add_confidence_band(n, alpha=0.95)
ax.add_lightning(n, 20)
ax.add_diagonal()

(Source code, png, hires.png, pdf)

../_images/pp-2.png
class ligo.skymap.plot.pp.PPPlot(*args, **kwargs)[source] [edit on github]

Bases: matplotlib.axes.Axes

Construct a probability–probability (P–P) plot.

Build an axes in a figure.

Parameters
figFigure

The axes is build in the Figure fig.

rect[left, bottom, width, height]

The axes is build in the rectangle rect. rect is in Figure coordinates.

sharex, shareyAxes, optional

The x or y axis is shared with the x or y axis in the input Axes.

frameonbool, default: True

Whether the axes frame is visible.

box_aspectNone, or a number, optional

Sets the aspect of the axes box. See set_box_aspect for details.

**kwargs

Other optional keyword arguments:

Properties: adjustable: {‘box’, ‘datalim’} agg_filter: a filter function, which takes a (m, n, 3) float array and a dpi value, and returns a (m, n, 3) array alpha: float or None anchor: 2-tuple of floats or {‘C’, ‘SW’, ‘S’, ‘SE’, …} animated: bool aspect: {‘auto’} or num autoscale_on: bool autoscalex_on: bool autoscaley_on: bool axes_locator: Callable[[Axes, Renderer], Bbox] axisbelow: bool or ‘line’ box_aspect: None, or a number clip_box: Bbox clip_on: bool clip_path: Patch or (Path, Transform) or None contains: unknown facecolor or fc: color figure: Figure frame_on: bool gid: str in_layout: bool label: object navigate: bool navigate_mode: unknown path_effects: AbstractPathEffect picker: None or bool or callable position: [left, bottom, width, height] or Bbox prop_cycle: unknown rasterization_zorder: float or None rasterized: bool or None sketch_params: (scale: float, length: float, randomness: float) snap: bool or None title: str transform: Transform url: str visible: bool xbound: unknown xlabel: str xlim: (bottom: float, top: float) xmargin: float greater than -0.5 xscale: {“linear”, “log”, “symlog”, “logit”, …} xticklabels: unknown xticks: unknown ybound: unknown ylabel: str ylim: (bottom: float, top: float) ymargin: float greater than -0.5 yscale: {“linear”, “log”, “symlog”, “logit”, …} yticklabels: unknown yticks: unknown zorder: float

Returns
Axes

The new Axes object.

add_confidence_band(nsamples, alpha=0.95, annotate=True, **kwargs)[source] [edit on github]

Add a target confidence band.

Parameters
nsamplesint

Number of P-values

alphafloat, default: 0.95

Confidence level

annotatebool, optional, default: True

If True, then label the confidence band.

Other Parameters
**kwargs :

optional extra arguments to matplotlib.axes.Axes.fill_betweenx

add_diagonal(*args, **kwargs)[source] [edit on github]

Add a diagonal line to the plot, running from (0, 0) to (1, 1).

Other Parameters
kwargs :

optional extra arguments to matplotlib.axes.Axes.plot

add_lightning(nsamples, ntrials, **kwargs)[source] [edit on github]

Add P-values drawn from a random uniform distribution, as a visual representation of the acceptable scatter about the diagonal.

Parameters
nsamplesint

Number of P-values in each trial

ntrialsint

Number of line series to draw.

Other Parameters
kwargs :

optional extra arguments to matplotlib.axes.Axes.plot

add_series(*p_values, **kwargs)[source] [edit on github]

Add a series of P-values to the plot.

Parameters
p_valuesnumpy.ndarray

One or more lists of P-values.

If an entry in the list is one-dimensional, then it is interpreted as an unordered list of P-values. The ranked values will be plotted on the horizontal axis, and the cumulative fraction will be plotted on the vertical axis.

If an entry in the list is two-dimensional, then the first subarray is plotted on the horizontal axis and the second subarray is plotted on the vertical axis.

drawstyle{‘steps’, ‘lines’, ‘default’}

Plotting style. If steps, then plot steps to represent a piecewise constant function. If lines, then connect points with straight lines. If default then use steps if there are more than 2 pixels per data point, or else lines.

Other Parameters
kwargs :

optional extra arguments to matplotlib.axes.Axes.plot

add_worst(*p_values)[source] [edit on github]

Mark the point at which the deviation is largest.

Parameters
p_valuesnumpy.ndarray

Same as in add_series.