Source code for lib5c.plotters.boxplots

"""
Module for plotting locus boxplots that show the distribution of 5C counts at
each locus across a region.
"""

import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns

from lib5c.util.parallelization import parallelize_regions
from lib5c.util.plotting import plotter


[docs]@parallelize_regions @plotter def plot_regional_locus_boxplot(regional_counts, color='darkgray', median_color='firebrick', median_linewidth=5.0, logged=True, sort=True, figsize=None, scaling_factor=0.05, dpi=300, despine=False, **kwargs): """ Plots a locus boxplot visualization showing the distribution of 5C counts at each locus across a region. Parameters ---------- regional_counts : np.ndarray The matrix of counts for this region. color : str Color to fill the boxplots. median_color : str Color to mark the medians of the boxplots with. median_linewidth : str Linewidth to draw the medians of the boxplots with. logged : bool Pass True to use a log-scale counts axis. sort : bool Pass True to sort the boxplots from left to right in order of increasing median value. figsize : Optional[Tuple[float, float]] Pass a tuple of the form ``(width, height)`` to force the size of the figure. If this kwarg is not passed, the figure size will be determined automatically as ``scaling_factor`` times the number of loci in the region. scaling_factor : float If ``figsize`` is not passed, the figure size will be determined automatically as ``scaling_factor`` times the number of loci in the region. dpi : int DPI to save figure at if auto-saving to a raster format. kwargs : kwargs Typical plotter kwargs. Returns ------- pyplot axis The axis plotted on. """ # honor median_color medianprops = {'color': median_color, 'linewidth': median_linewidth} # honor logged if logged: regional_counts = np.log2(regional_counts) # honor sort if sort: regional_counts = regional_counts[ np.nanmedian(regional_counts, axis=1).argsort()].T # default figsize if figsize is None: width = scaling_factor * len(regional_counts) figsize = (width, 0.75 * width) # plot with sns.plotting_context(context='paper'), sns.axes_style('white'): plt.gcf().set_size_inches(figsize) sns.boxplot(data=regional_counts, color=color, medianprops=medianprops) # clear xticks plt.gca().get_xaxis().set_ticks([])