Source code for lib5c.tools.pvalue_histogram

from lib5c.tools.parents import parallelization_parser, lim_parser, \
    primerfile_parser


[docs]def add_pvalue_histogram_tool(parser): pvalue_histogram_parser = parser.add_parser( 'pvalue-histogram', prog='lib5c plot pvalue-histogram', help='draw histograms of pvalues', parents=[primerfile_parser, parallelization_parser, lim_parser] ) pvalue_histogram_parser.add_argument( '-B', '--bh_fdr', action='store_true', help='''Pass this flag to apply BH-FDR adjustment to p-values.''') pvalue_histogram_parser.add_argument( '-T', '--two_tail', action='store_true', help='''Convert one-tail p-values to two-tail p-values before plotting.''') pvalue_histogram_parser.add_argument( 'pvalues', type=str, help='''Countsfile containing pvalues to histogram.''') pvalue_histogram_parser.add_argument( 'outfile', type=str, help='''File to save histogram to.''') pvalue_histogram_parser.set_defaults(func=pvalue_histogram_tool)
[docs]def pvalue_histogram_tool(parser, args): import numpy as np import matplotlib.pyplot as plt import seaborn as sns from lib5c.tools.helpers import resolve_parallel, resolve_primerfile from lib5c.parsers.primers import load_primermap from lib5c.parsers.counts import load_counts from lib5c.util.counts import flatten_counts_to_list from lib5c.util.system import check_outdir from lib5c.util.plotting import adjust_plot, DEFAULT_RC from lib5c.util.statistics import adjust_pvalues, convert_to_two_tail # resolve primerfile and parallel resolve_parallel(parser, args, subcommand='plot pvalue-histogram', key_arg='pvalues') primerfile = resolve_primerfile(args.pvalues, args.primerfile) # load and flatten counts print('loading counts') primermap = load_primermap(primerfile) pvalue_counts = load_counts(args.pvalues, primermap) pvalues = flatten_counts_to_list(pvalue_counts, discard_nan=True) if args.two_tail: pvalues = convert_to_two_tail(pvalues) if args.bh_fdr: pvalues = adjust_pvalues(pvalues) # resolve plot_kwargs xlim = list(map(float, args.xlim.strip('()').split(','))) \ if args.xlim is not None else [0, 1] ylim = list(map(float, args.ylim.strip('()').split(','))) \ if args.ylim is not None else None # check outdir check_outdir(args.outfile) # plot sns.set(color_codes=True) with sns.axes_style('ticks', DEFAULT_RC): plt.hist(pvalues, bins=np.linspace(0, 1, 101)) # adjust plot adjust_plot(xlim=xlim, ylim=ylim) # save plt.savefig(args.outfile, bbox_inches='tight')