def report(args):
    '''
    %prog report ksfile

    generate a report given a Ks result file (as produced by synonymous_calc.py).
    describe the median Ks, Ka values, as well as the distribution in stem-leaf plot
    '''
    from jcvi.utils.cbook import SummaryStats
    from jcvi.graphics.histogram import stem_leaf_plot

    p = OptionParser(report.__doc__)
    p.add_option("--pdf", default=False, action="store_true",
            help="Generate graphic output for the histogram [default: %default]")
    p.add_option("--components", default=1, type="int",
            help="Number of components to decompose peaks [default: %default]")
    add_plot_options(p)
    opts, args, iopts = p.set_image_options(args, figsize="5x5")

    if len(args) !=  1:
        sys.exit(not p.print_help())

    ks_file, = args
    data = KsFile(ks_file)
    ks_min = opts.vmin
    ks_max = opts.vmax
    bins = opts.bins

    for f in fields.split(",")[1:]:
        columndata = [getattr(x, f) for x in data]
        ks = ("ks" in f)
        if not ks:
            continue

        columndata = [x for x in columndata if ks_min <= x <= ks_max]

        st = SummaryStats(columndata)
        title = "{0} ({1}): ".format(descriptions[f], ks_file)
        title += "Median:{0:.3f} (1Q:{1:.3f}|3Q:{2:.3f}||".\
                format(st.median, st.firstq, st.thirdq)
        title += "Mean:{0:.3f}|Std:{1:.3f}||N:{2})".\
                format(st.mean, st.sd, st.size)

        tbins = (0, ks_max, bins) if ks else (0, .6, 10)
        digit = 2 if (ks_max * 1. / bins) < .1 else 1
        stem_leaf_plot(columndata, *tbins, digit=digit, title=title)

    if not opts.pdf:
        return

    components = opts.components
    data = [x.ng_ks for x in data]
    data = [x for x in data if ks_min <= x <= ks_max]

    fig = plt.figure(1, (iopts.w, iopts.h))
    ax = fig.add_axes([.12, .1, .8, .8])
    kp = KsPlot(ax, ks_max, opts.bins, legendp=opts.legendp)
    kp.add_data(data, components, fill=opts.fill, fitted=opts.fit)
    kp.draw(title=opts.title)
def report ( args ) : from jcvi . utils . cbook import SummaryStats from jcvi . graphics . histogram import stem_leaf_plot p = OptionParser ( report . __doc__ ) p . add_option ( "--pdf" , default = False , action = "store_true" , help = "Generate graphic output for the histogram [default: %default]" ) p . add_option ( "--components" , default = 1 , type = "int" , help = "Number of components to decompose peaks [default: %default]" ) add_plot_options ( p ) opts , args , iopts = p . set_image_options ( args , figsize = "5x5" ) if len ( args ) != 1 : sys . exit ( not p . print_help ( ) ) ks_file , = args data = KsFile ( ks_file ) ks_min = opts . vmin ks_max = opts . vmax bins = opts . bins for f in fields . split ( "," ) [ 1 : ] : columndata = [ getattr ( x , f ) for x in data ] ks = ( "ks" in f ) if not ks : continue columndata = [ x for x in columndata if ks_min <= x <= ks_max ] st = SummaryStats ( columndata ) title = "{0} ({1}): " . format ( descriptions [ f ] , ks_file ) title += "Median:{0:.3f} (1Q:{1:.3f}|3Q:{2:.3f}||" . format ( st . median , st . firstq , st . thirdq ) title += "Mean:{0:.3f}|Std:{1:.3f}||N:{2})" . format ( st . mean , st . sd , st . size ) tbins = ( 0 , ks_max , bins ) if ks else ( 0 , .6 , 10 ) digit = 2 if ( ks_max * 1. / bins ) < .1 else 1 stem_leaf_plot ( columndata , * tbins , digit = digit , title = title ) if not opts . pdf : return components = opts . components data = [ x . ng_ks for x in data ] data = [ x for x in data if ks_min <= x <= ks_max ] fig = plt . figure ( 1 , ( iopts . w , iopts . h ) ) ax = fig . add_axes ( [ .12 , .1 , .8 , .8 ] ) kp = KsPlot ( ax , ks_max , opts . bins , legendp = opts . legendp ) kp . add_data ( data , components , fill = opts . fill , fitted = opts . fit ) kp . draw ( title = opts . title )
%prog report ksfile

    generate a report given a Ks result file (as produced by synonymous_calc.py).
    describe the median Ks, Ka values, as well as the distribution in stem-leaf plot