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')