`subset` provides a subsetted boolean of items to consider.  If no subset,
    you can use all with `np.ones_like(ind1) == 1`

    `ind1` is used to subset rows, e.g., log2fc > 0.  This is used for rows, so
    row_label might be ['upregulated', 'others']

    `ind2` is used to subset cols.  For example, col_labels would be
    ['bound', 'unbound']

def table_maker(subset, ind1, ind2, row_labels, col_labels, title):
    """
    `subset` provides a subsetted boolean of items to consider.  If no subset,
    you can use all with `np.ones_like(ind1) == 1`

    `ind1` is used to subset rows, e.g., log2fc > 0.  This is used for rows, so
    row_label might be ['upregulated', 'others']

    `ind2` is used to subset cols.  For example, col_labels would be
    ['bound', 'unbound']
    """
    table = [
        sum(subset & ind1 & ind2),
        sum(subset & ind1 & ~ind2),
        sum(subset & ~ind1 & ind2),
        sum(subset & ~ind1 & ~ind2)
    ]
    print
    print title
    print '-' * len(title)
    print print_2x2_table(table, row_labels=row_labels, col_labels=col_labels)
    print print_row_perc_table(
        table, row_labels=row_labels, col_labels=col_labels)
    print print_col_perc_table(
        table, row_labels=row_labels, col_labels=col_labels)
    print fisher.pvalue(*table)