def plot_evalution_result(result,
                          output_dir,
                          subplot_ordering,
                          xlabel='U',
                          file_prefix='',
                          figure_size=(None, None)):
    """
    result: similar to 3d matrix (metric, method, U)
    """
    print figure_size
    if figure_size[0] and figure_size[1]:
        print('changing size', figure_size)
        from pylab import rcParams
        rcParams['figure.figsize'] = figure_size

    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    plt.clf()
    nrows, ncols = 2, 3

    fig = plt.figure()
    for i, metric in enumerate(subplot_ordering):
        df = result[metric]
        ax = plt.subplot(nrows, ncols, i + 1)
        plt.tight_layout()
        xs = df.columns.tolist()
        for ith, (r, series) in enumerate(df.iterrows()):
            ys = series.tolist()
            plt.plot(xs,
                     ys,
                     marker=markers[ith],
                     color=colors[ith],
                     markersize=6,
                     linewidth=3.0)
        plt.xticks(np.arange(np.min(xs), np.max(xs) + 1, 20))
        if i / ncols > 0:
            plt.xlabel(xlabel)
        plt.ylabel(label_mapping.get(metric, metric))
        ax.yaxis.label.set_size(20)
        ax.xaxis.label.set_size(20)
        all_ys = [e for r, s in df.iterrows() for e in s.tolist()]
        if np.min(all_ys) >= 0:
            plt.ylim(ymin=0)
        plt.ylim(ymax=np.max(all_ys) + 0.1)

    # draw legend
    ax = plt.subplot(nrows, ncols, 6)
    xs = df.columns.tolist()
    for ith, (r, series) in enumerate(df.iterrows()):
        ys = series.tolist()
        plt.plot(xs[:1], ys[:1], marker=markers[ith], color=colors[ith])
    plt.legend(map(lambda k: legend_mapping[k], df.index.tolist()),
               loc='lower right')
    ax.set_xticklabels(())
    ax.set_yticklabels(())
    ax.axis('off')
    fig.savefig(os.path.join(output_dir, 'together.png'), bbox_inches='tight')
def plot_evalution_result(result, output_dir,
                          subplot_ordering,
                          xlabel='U',
                          file_prefix='',
                          figure_size=(None, None)):
    """
    result: similar to 3d matrix (metric, method, U)
    """
    print figure_size
    if figure_size[0] and figure_size[1]:
        print('changing size', figure_size)
        from pylab import rcParams
        rcParams['figure.figsize'] = figure_size

    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    plt.clf()
    nrows, ncols = 2, 3

    fig = plt.figure()
    for i, metric in enumerate(subplot_ordering):
        df = result[metric]
        ax = plt.subplot(nrows, ncols, i+1)
        plt.tight_layout()
        xs = df.columns.tolist()
        for ith, (r, series) in enumerate(df.iterrows()):
            ys = series.tolist()
            plt.plot(xs, ys, marker=markers[ith], color=colors[ith], markersize=6, linewidth=3.0)
        plt.xticks(np.arange(np.min(xs), np.max(xs)+1, 20))
        if i / ncols > 0:
            plt.xlabel(xlabel)
        plt.ylabel(label_mapping.get(metric, metric))
        ax.yaxis.label.set_size(20)
        ax.xaxis.label.set_size(20)
        all_ys = [e for r, s in df.iterrows() for e in s.tolist()]
        if np.min(all_ys) >= 0:
            plt.ylim(ymin=0)
        plt.ylim(ymax=np.max(all_ys)+0.1)

    # draw legend
    ax = plt.subplot(nrows, ncols, 6)
    xs = df.columns.tolist()
    for ith, (r, series) in enumerate(df.iterrows()):
        ys = series.tolist()
        plt.plot(xs[:1], ys[:1],
                 marker=markers[ith], color=colors[ith])
    plt.legend(map(lambda k: legend_mapping[k], df.index.tolist()),
               loc='lower right')
    ax.set_xticklabels(())
    ax.set_yticklabels(())
    ax.axis('off')
    fig.savefig(
        os.path.join(output_dir, 'together.png'),
        bbox_inches='tight'
    )
def plot_evalution_result(results,
                          metric,
                          xlabel,
                          titles,
                          output_path,
                          legend_in_which_subplot=1,
                          layout=(2, 2),
                          figure_size=(None, None)):
    """
    subplots across different dataset
    """
    font_size = 22
    legend_fontsize = 18
    if figure_size[0] and figure_size[1]:
        from pylab import rcParams
        rcParams['figure.figsize'] = figure_size

    output_dir=os.path.dirname(output_path)
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    plt.clf()
    nrows, ncols = layout

    fig = plt.figure()
    for i, result in enumerate(results):
        df = result[metric]
        ax = plt.subplot(nrows, ncols, i+1)
        plt.tight_layout()
        xs = df.columns.tolist()
        for ith, (r, series) in enumerate(df.iterrows()):
            if r not in ban_list:
                ys = series.tolist()
                plt.plot(xs, ys, marker=markers[ith], color=colors[ith], markersize=10, linewidth=3.0)
        plt.xticks(np.arange(np.min(xs), np.max(xs)+1, 20))
        plt.xlabel(xlabel)
        ax.yaxis.label.set_size(font_size)
        ax.xaxis.label.set_size(font_size)
        if i % ncols == 0:
            plt.ylabel(label_mapping.get(metric, metric))
        plt.title(titles[i], fontsize=font_size)

        legends = [a for a in df.index.tolist() if a not in ban_list]
        if i+1 == legend_in_which_subplot:
            mpl.rc('font', size=legend_fontsize)
            plt.legend(map(lambda k: legend_mapping.get(k, k), legends),
                       loc='lower right')

    fig.savefig(output_path, bbox_inches='tight')