plastid.plotting.plots module

Sommon common plots that are not directly implemented in matplotlib, as well as some specific plots used by plastid. Demos of these appear in Plotting tools.

General plots

stacked_bar()
Create a stacked bar graph
kde_plot()
Plot a kernel density estimate (continuous histogram) of data
scatterhist_x(), scatterhist_y(), and scatterhist_xy()
Create scatter plots with kernel density estimates of the marginal distributions along side them
profile_heatmap()
Plot a heatmap, with a columnwise median (or other profile summarizing the heatmap) in an upper panel above it, with aligned coordinates
triangle_plot()
Plot data lying on the plane x + y + z = k (e.g. codon phasing) in a homogeneous 2D representation

Plots for genomics

ma_plot()
Plot fold changes between x and y (\(\log_{2} (y/x)\)) as a function of the mean of x and y (\(0.5*(x+y)\)).
phase_plot()
For ribosome profiling. Plot sub-codon phasing of ribosome-protected foorpints stratified by read length, as well as the fraction of total reads represented by each length.
plastid.plotting.plots.get_color_cycle(ax)[source]

Get color cycle iterator from multiple versions of matplotlib axes

Parameters:
ax : matplotlib.axes.Axes
Returns:
iterator

Iterator over colors, passable to matplotlib color keyword

plastid.plotting.plots.kde_plot(data, axes=None, color=None, label=None, alpha=0.7, vert=False, log=False, base=10, points=500, bw_method='scott', rescale=False, zorder=None, fill=True)[source]

Plot a kernel density estimate of data on axes.

Parameters:
data : numpy.ndarray

Array of data

axes : matplotlib.axes.Axes or None, optional

Axes in which to place plot. If None, a new figure is generated. (Default: None)

color : matplotlib colorspec, optional

Color to use for plotting (Default: use next in matplotlibrc)

label : str, optional

Name of data series (used for legend; default: None)

alpha : float, optional

Amount of alpha transparency to use (Default: 0.7)

vert : bool, optional

If true, plot kde vertically

log : bool, optional

If True, data is log-transformed before the kde is estimated. Data are converted back to non-log space afterwards.

base : 2, 10, or numpy.e, optional

If log is True, this serves as the base of the log space. If log is False, this is ignored. (Default: 2)

points : int

Number of points over which to evaluate kde. (Default: 100)

bw_method : str

Bandwith estimation method. See documentation for scipy.stats.gaussian_kde. (Default: “scott”)

Returns:
:class:`matplotlib.figure.Figure`

Parent figure of axes

:class:`matplotlib.axes.Axes`

Axes containing plot

plastid.plotting.plots.ma_plot(x, y, axes=None, color=None, label=None, xlabel=None, ylabel=None, title=None, right_width=0.2, log='xy', min_x=-inf, max_x=inf, min_y=-inf, max_y=inf, scargs={'alpha': 0.7, 'facecolor': 'none', 'marker': 'o', 'rasterized': True, 's': 8}, mask_invalid=True, kdalpha=0.7)[source]

Plot fold changes (\(\log_{2} (y/x)\)) as a function of the mean of x and y (\(0.5*(x+y)\)).

Parameters:
x, y : numpy.ndarray or list

Pair arrays or lists of corresponding numbers

color : matplotlib colorspec, optional

Color to use in plot

label : str or None, optional

If not None, a label for plotting

xlabel : str or None, optional

If not None, an x-axis label

ylabel : str or None, optional

If not None, a y-axis label

right_width : float, optional

fraction of axes width to use in right panel containing marginal distribution (Default: 0.2)

axes : matplotlib.axes.Axes, dict, or None, optional

If a matplotlib.axes.Axes, an axes in which to place plot. This axes will be split into relevant panels.

If a dict, this is expected to be a group of pre-split axes.

If None, a new figure is generated, and axes are split. (Default: None)

mask_invalid : bool, optional

If True mask out any `nan`s or `inf`s, as these mess up kernel density estimates and histograms in matplotlib, even if in masked arrays

min_x, min_y, max_x, max_y : number, optional

If supplied, set values below min_x to min_x, values larger than max_x to max_x and so for min_y and max_y

log : str, “”, “x”, “xy”, or “xy”, optional

Plot these axes on a log scale (Default: “xy”)

scargs : Keyword arguments, optional

Arguments to pass to scatter() (Default: plastid_default_scatter ). Recommend: set rasterized to True

kdalpha : float, optional

Alpha level (transparency) for marginal distributions (Default: 0.7)

Returns:
:class:`matplotlib.figure.Figure`

Figure

dict

Dictionary of axes. ‘orig’ refers to ax. The central panel is ‘main’. Other panels will be mapped to ‘top’, ‘left’ et c, if they are created.

plastid.plotting.plots.phase_plot(counts, labels=None, cmap=None, color=None, lighten_by=0.2, fig={}, line={}, bar={})[source]

Phasing plot for ribosome profiling

Creates a two-panel plot:

  • the top panel is a line graph indicating the fraction of reads as a function of read length
  • the bottom panel is a stacked bar graph, showing the fraction of reads in each codon position for each read length, with codon position 2 stacked above position 1 stacked above position 0
Parameters:
counts : numpy.ndarray

Nx3 array of raw counts, where each row represents a read length, and each column a codon phase

labels : list, optional

Labels for each stack. If None, stacks are labeled sequentially by number. (Default: None)

lighten_by : float, optional

Amount by which to lighten sequential blocks in each stack. (Default: 0.10)

cmap : matplotlib.colors.Colormap, optional

Colormap from which to generate bar colors. If supplied, will override any color attribute in **kwargs.

color : matplotlib colorspec, or list of these

Colors to use in plot. Overridden if cmap is supplied.

fig : dict

Keyword arguments to matplotlib.pylot.figure()

line : dict

Keyword arguments to pass to matplotlib.pyplot.plot() in top panel

bar : dict

Keyword arguments to pass to matplotlib.pyplot.bar() in bottom panel

Returns:
:class:`matplotlib.figure.Figure`

Figure

tuple

Tuple of matplotlib.axes.Axes; the first corresponding to the line graph (top panel), the second, the bar graph (bottom).

plastid.plotting.plots.profile_heatmap(data, profile=None, x=None, axes=None, sort_fn=<function sort_max_position>, cmap=None, nancolor='#666666', im_args={}, plot_args={})[source]

Create a dual-paned plot in which profile is displayed in a top panel, above a heatmap showing the intensities of each row of data, optionally sorted top-to-bottom by sort_fn.

Parameters:
data : numpy.ndarray

Array of data, in which each row is an individual aligned vector of data for region of interest, and each column a position in that vector

profile : numpy.ndarray or None

Reduced profile of data, often a column-wise median. If not supplied, it will be calculated.

x : numpy.ndarray

Array of values for X-axis

axes : matplotlib.axes.Axes or None, optional

Axes in which to place plot. If None, a new figure is generated. (Default: None)

sort_fn : function, optional

Sort rows in data by this function before plotting. Function must return a numpy.ndarray of indices corresponding to rows in data (Default: sort by ascending argmax of each row)

cmap : Colormap, optional

Colormap to use in heatmap. It not None, overrides any value in im_args. (Default: None)

nancolor : str or matplotlib colorspec

Color used for plotting nan and other illegal or masked values

im_args : dict

Keyword arguments to pass to matplotlib.pyplot.imshow()

plot_args : dict

Keyword arguments to pass to matplotlib.pyplot.plot() for plotting metagene average

Returns:
:class:`matplotlib.figure.Figure`

Parent figure of axes

dict

Dictionary of matplotlib.axes.Axes. “top” refers to the panel containing the summary profile. “main” refers to the heatmap of individual values

plastid.plotting.plots.scatterhist_x(x, y, color=None, axes=None, label=None, top_height=0.2, mask_invalid=True, log='', min_x=-inf, min_y=-inf, max_x=inf, max_y=inf, scargs={'alpha': 0.7, 'facecolor': 'none', 'marker': 'o', 'rasterized': True, 's': 8}, bw_method='scott', kdalpha=0.7)[source]

Produce a scatter plot with a kernel density estimate of the marginal x distribution

Parameters:
x, y : numpy.ndarray or list

Pair arrays or lists of corresponding numbers

color : matplotlib colorspec, optional

Color to use in plot

label : str, or None

If not None, a label for plotting

axes : matplotlib.axes.Axes, dict, or None, optional

If a matplotlib.axes.Axes, an axes in which to place plot. This axes will be split into relevant panels.

If a dict, this is expected to be a group of pre-split axes.

If None, a new figure is generated, and axes are split. (Default: None)

top_height : float, optional

fraction of axes height to use in top panel containing marginal distribution (Default: 0.2)

mask_invalid : bool, optional

If True mask out any `nan`s or `inf`s, as these mess up kernel density estimates and histograms in matplotlib, even if in masked arrays

min_x, min_y, max_x, max_y : number, optional

If supplied, set values below min_x to min_x, values larger than max_x to max_x and so for min_y and max_y

log : str, “”, “x”, “xy”, or “xy”, optional

Plot these axes on a log scale (Default: “” for no log axes)

scargs : Keyword arguments, optional

Arguments to pass to scatter() (Default: plastid_default_scatter). We highly recommend setting rasterized to True!

kdalpha : float, optional

Alpha level (transparency) for marginal distributions (Default: 0.7)

bw_method : str

Bandwith estimation method. See documentation for scipy.stats.gaussian_kde. (Default: “scott”)

Returns:
:class:`matplotlib.figure.Figure`

Figure

dict

Dictionary of axes. ‘orig’ refers to ax. The central panel is ‘main’. Other panels will be mapped to ‘top’, ‘left’ et c, if they are created.

plastid.plotting.plots.scatterhist_xy(x, y, color=None, axes=None, label=None, top_height=0.2, right_width=0.2, mask_invalid=True, log='xy', min_x=-inf, min_y=-inf, max_x=inf, max_y=inf, scargs={'alpha': 0.7, 'facecolor': 'none', 'marker': 'o', 'rasterized': True, 's': 8}, kdalpha=0.7, bw_method='scott')[source]

Produce a scatter plot with kernel density estimate of the marginal x and y distributions

Parameters:
x, y : numpy.ndarray or list

Pair arrays or lists of corresponding numbers

color : matplotlib colorspec, optional

Color to use in plot

label : str, or None

If not None, a label for plotting top_height : float, optional fraction of axes height to use in top panel containing marginal distribution (Default: 0.2)

right_width : float, optional

fraction of axes width to use in right panel containing marginal distribution (Default: 0.2)

top_height : float, optional

fraction of axes height to use in top panel containing marginal distribution (Default: 0.2)

axes : matplotlib.axes.Axes, dict, or None, optional

If a matplotlib.axes.Axes, an axes in which to place plot. This axes will be split into relevant panels.

If a dict, this is expected to be a group of pre-split axes.

If None, a new figure is generated, and axes are split. (Default: None)

mask_invalid : bool, optional

If True mask out any `nan`s or `inf`s, as these mess up kernel density estimates and histograms in matplotlib, even if in masked arrays

min_x, min_y, max_x, max_y : number, optional

If supplied, set values below min_x to min_x, values larger than max_x to max_x and so for min_y and max-y

log : str, “”, “x”, “xy”, or “xy”, optional

Plot these axes on a log scale (Default: “” for no log axes)

scargs : Keyword arguments, optional

Arguments to pass to scatter() (Default: plastid_default_scatter). We highly recommend setting rasterized to True!

kdalpha : float, optional

Alpha level (transparency) for marginal distributions (Default: 0.7)

bw_method : str

Bandwith estimation method. See documentation for scipy.stats.gaussian_kde. (Default: “scott”)

Returns:
:class:`matplotlib.figure.Figure`

Figure

dict

Dictionary of axes. ‘orig’ refers to ax. The central panel is ‘main’. Other panels will be mapped to ‘top’, ‘left’ et c, if they are created.

plastid.plotting.plots.scatterhist_y(x, y, color=None, axes=None, label=None, right_width=0.2, mask_invalid=True, log='xy', min_x=-inf, min_y=-inf, max_x=inf, max_y=inf, scargs={'alpha': 0.7, 'facecolor': 'none', 'marker': 'o', 'rasterized': True, 's': 8}, bw_method='scott', kdalpha=0.7)[source]

Produce a scatter plot with a kernel density estimate of the marginal y distribution

Parameters:
x, y : numpy.ndarray or list

Pair arrays or lists of corresponding numbers

color : matplotlib colorspec, optional

Color to use in plot

label : str, or None

If not None, a label for plotting

axes : matplotlib.axes.Axes, dict, or None, optional

If a matplotlib.axes.Axes, an axes in which to place plot. This axes will be split into relevant panels.

If a dict, this is expected to be a group of pre-split axes.

If None, a new figure is generated, and axes are split. (Default: None)

right_width : float, optional

fraction of axes width to use in right panel containing marginal distribution (Default: 0.2)

mask_invalid : bool, optional

If True mask out any `nan`s or `inf`s, as these mess up kernel density estimates and histograms in matplotlib, even if in masked arrays

min_x, min_y, max_x, max_y : number, optional

If supplied, set values below min_x to min_x, values larger than max_x to max_x and so for min_y and max_y

log : str, “”, “x”, “xy”, or “xy”, optional

Plot these axes on a log scale (Default: “” for no log axes)

scargs : Keyword arguments, optional

Arguments to pass to scatter() (Default: plastid_default_scatter). We highly recommend setting rasterized to True!

kdalpha : float, optional

Alpha level (transparency) for marginal distributions (Default: 0.7)

bw_method : str

Bandwith estimation method. See documentation for scipy.stats.gaussian_kde. (Default: “scott”)

Returns:
:class:`matplotlib.figure.Figure`

Figure

dict

Dictionary of axes. ‘orig’ refers to ax. The central panel is ‘main’. Other panels will be mapped to ‘top’, ‘left’ et c, if they are created.

plastid.plotting.plots.sort_max_position(data)[source]

Generate indices that sort rows in data by column in which the row’s maximal value is attained

Parameters:
data : numpy.ndarray
Returns:
:class:`numpy.ndarray`

Indices of rows that sort data by max position

plastid.plotting.plots.stacked_bar(data, axes=None, labels=None, lighten_by=0.1, cmap=None, **kwargs)[source]

Create a stacked bar graph

Parameters:
data : numpy.ndarray

Array of data, in which each row is a stack, each column a value in that stack.

axes : matplotlib.axes.Axes or None, optional

Axes in which to place plot. If None, a new figure is generated. (Default: None)

labels : list, optional

Labels for each stack. If None, stacks are labeled sequentially by number. (Default: None)

lighten_by : float, optional

Amount by which to lighten sequential blocks in each stack. (Default: 0.10)

cmap : matplotlib.colors.Colormap, optional

Colormap from which to generate bar colors. If supplied, will override any color attribute in **kwargs. (Default: None)

**kwargs : keyword arguments

Other keyword arguments to pass to matplotlib.pyplot.bar()

Returns:
:class:`matplotlib.figure.Figure`

Parent figure of axes

:class:`matplotlib.axes.Axes`

Axes containing plot

plastid.plotting.plots.triangle_plot(data, axes=None, fn='scatter', vertex_labels=None, grid=None, clip=True, do_setup=True, **kwargs)[source]

Plot data lying in a plane x + y + z = k in a homogenous triangular space.

Parameters:
data : numpy.ndarray

Mx2 or Mx3 list or array of points in triangular space, where the first column is the first coordinate, the second column the second, and the third, the third.

axes : matplotlib.axes.Axes or None, optional

Axes in which to place plot. If None, a new figure is generated. (Default: None)

fn : str, optional

Name of plotting function. Must correspond to an attribute of a matplotlib.axes.Axes (e.g. ‘scatter’, ‘plot’, ‘hexbin’et c.), that is be able to take an Nx2 numpy.ndarray in Cartesian space as input (e.g. ‘plot’, ‘scatter’, ‘hexbin’; Default: ‘scatter’).

vertex_labels : list or None, optional

Labels for vertex. If None, vertices aren’t labeled. (Default: None)

grid : numpy.ndarray or None, optional

If not None, draw gridlines at intervals specified in grid, as long as the grid coordinate is > 0.33333 (center of triangle) and <= 1.0 (border).

clip : bool, optional

If True clipping masks corresponding to the triangle boundaries will be applied to all plot elements (Default: True)

do_setup : bool, optional

If True, the plot area will be prepared. A triangle will be drawn, gridlines drawn, et c. Specify False if plotting a second dataset ontop of an already-prepared axes (Default: True)

**kwargs : keyword arguments

Other keyword arguments to pass to function specified by fn.

Returns:
:class:`matplotlib.figure.Figure`

Parent figure of axes

:class:`matplotlib.axes.Axes`

Axes containing plot

plastid.plotting.plots.trianglize(data)[source]

Convert points from triangular space to Cartesian space for plotting. Called internally by triangle_plot().

Parameters:
data : class:numpy.ndarray

Mx2 or Mx3 list or array of points in triangular space, where the first column is the first coordinate, the second column the second, and the third, the third.

Returns:
:class:`numpy.ndarray`

Corresponding Nx2 array of points in Cartesian space, for plotting on a standard axis

plastid.plotting.plots.plastid_default_scatter = {'alpha': 0.7, 'facecolor': 'none', 'marker': 'o', 'rasterized': True, 's': 8}

Default parameters for scatter plots