def plot_overall_odometry_errors(odo_err_col, algorithm_names, rel_e_distances, plot_settings, output_dir): for et in odo_err_col: if et == 'rel_trans_perc': ylabel = 'Translation error (\%)' elif et == 'rel_rot_deg_per_m': ylabel = 'Rotation error (deg / m)' else: assert False cur_err = odo_err_col[et] assert sorted(algorithm_names) == sorted(list(cur_err.keys())) colors = [] labels = [] for alg in algorithm_names: colors.append(plot_settings['algo_colors'][alg]) labels.append(plot_settings['algo_labels'][alg]) distances = sorted(rel_e_distances) errors = [] for alg in algorithm_names: errors.append([cur_err[alg][d] for d in distances]) fig = plt.figure(figsize=(12, 3)) ax = fig.add_subplot(111, xlabel='Distance traveled [m]', ylabel=ylabel) pu.boxplot_compare(ax, distances, errors, labels, colors, legend=True) fig.tight_layout() fig.savefig(output_dir + '/' + 'overall_{}'.format(et) + FORMAT, bbox_inches="tight", dpi=args.dpi) plt.close(fig)
def _boxplotOrientDiffs(orient_diffs, names, nm_to_label, top_save_dir): xlabels = kMetricsLabels data_labels = [nm_to_label[v] for v in names] colors = [kPallete[i] for i, v in enumerate(names)] data = [] for nm in names: data_i = [] for m in kMetrics: data_i.append(orient_diffs[nm][m]) data.append(data_i) fig = plt.figure(figsize=(12, 6)) ax = fig.add_subplot(111) pu.boxplot_compare(ax, xlabels, data, data_labels, colors) ax.set_ylabel("Orientation diff. (deg)") plt.tight_layout() fig.savefig(os.path.join(top_save_dir, 'orient_diffs_boxplot.png'), bbox_inches='tight')
def plot_odometry_error_per_dataset(dataset_rel_err, dataset_names, algorithm_names, datasets_outdir, plot_settings): for dataset_idx, dataset_nm in enumerate(dataset_names): output_dir = datasets_outdir[dataset_nm] print("Plotting {0}...".format(dataset_nm)) rel_err = dataset_rel_err[dataset_idx] assert sorted(algorithm_names) == sorted( list(rel_err['trans_err'].keys())) distances = rel_err['subtraj_len'] config_labels = [] config_colors = [] for v in algorithm_names: config_labels.append(plot_settings['algo_labels'][v]) config_colors.append(plot_settings['algo_colors'][v]) fig = plt.figure(figsize=(12, 3)) ax = fig.add_subplot(121, xlabel='Distance traveled (m)', ylabel='Translation error (\%)') pu.boxplot_compare( ax, distances, [rel_err['trans_err_perc'][v] for v in algorithm_names], config_labels, config_colors, legend=False) ax = fig.add_subplot(122, xlabel='Distance traveled (m)', ylabel='Rotation error (deg / m)') pu.boxplot_compare( ax, distances, [rel_err['rot_deg_per_m'][v] for v in algorithm_names], config_labels, config_colors, legend=True) fig.tight_layout() fig.savefig(output_dir + '/' + dataset_nm + '_trans_rot_error' + FORMAT, bbox_inches="tight", dpi=args.dpi) plt.close(fig)
def _boxplotFIMDiffs(nm_to_fim_diff_perc, names, nm_to_label, top_save_dir): xlabels = [nm_to_label[v] for v in names] data_labels = ['FIM Diff'] colors = [kPallete[0]] data = [] for nm in names: data.append(nm_to_fim_diff_perc[nm]) fig = plt.figure(figsize=(12, 6)) ax = fig.add_subplot(111) pu.boxplot_compare(ax, xlabels, [data], data_labels, colors, legend=False) ax.set_ylabel("FIM diff. (\%)") plt.setp(ax.get_xticklabels(), rotation=45, ha="right", rotation_mode="anchor") plt.tight_layout() fig.savefig(os.path.join(top_save_dir, 'fim_diffs_boxplot.png'), bbox_inches='tight')
def plot_rel_traj_error(self, FORMAT='.png'): print(">>> Plotting relative (odometry) error...") distances = self.preset_boxplot_distances rel_trans_err = [[self.rel_errors[d]['rel_trans'] for d in distances]] rel_trans_err_perc = [[self.rel_errors[d]['rel_trans_perc'] for d in distances]] rel_yaw_err = [[self.rel_errors[d]['rel_yaw'] for d in distances]] labels = ['Estimate'] colors = ['k', 'b'] # plot relative translation error (in meters) fig = plt.figure(figsize=(6, 2.5)) ax = fig.add_subplot(111, xlabel='Distance traveled [m]', ylabel='Translation error [m]') pu.boxplot_compare(ax, distances, rel_trans_err, labels, colors) fig.tight_layout() fig.savefig(self.plots_dir + '/rel_translation_error' + FORMAT, bbox_inches="tight") plt.close(fig) # plot relative translation error (in %) fig = plt.figure(figsize=(6, 2.5)) ax = fig.add_subplot( 111, xlabel='Distance traveled [m]',ylabel='Translation error [\%]') pu.boxplot_compare(ax, distances, rel_trans_err_perc, labels, colors) fig.tight_layout() fig.savefig(self.plots_dir + '/rel_translation_error_perc' + FORMAT, bbox_inches="tight") plt.close(fig) # plot relative rotation error (in degrees) fig = plt.figure(figsize=(6, 2.5)) ax = fig.add_subplot(111, xlabel='Distance traveled [m]', ylabel='Yaw error [deg]') pu.boxplot_compare(ax, distances, rel_yaw_err, labels, colors) fig.tight_layout() fig.savefig(self.plots_dir + '/rel_yaw_error' + FORMAT, bbox_inches="tight") plt.close(fig)
def plot_rmse_per_dataset(algorithm_rmse, dataset_names, algorithm_names, output_dir, plot_settings): config_labels = [] config_colors = [] assert sorted(algorithm_names) == sorted( list(algorithm_rmse['trans_err'].keys())) for v in algorithm_names: config_labels.append(plot_settings['algo_labels'][v]) config_colors.append(plot_settings['algo_colors'][v]) assert len(datasets_labels) == len(datasets) labels = [plot_settings['datasets_labels'][v] for v in dataset_names] # check n_data = len(datasets) for v in algorithm_names: assert len(algorithm_rmse['trans_err'][v]) == n_data assert len(algorithm_rmse['rot_err'][v]) == n_data fig = plt.figure(figsize=(6, 3)) ax = fig.add_subplot(111, xlabel='Datasets', ylabel='Translation RMSE (m)') pu.boxplot_compare( ax, labels, [algorithm_rmse['trans_err'][v] for v in algorithm_names], config_labels, config_colors) fig.tight_layout() fig.savefig(output_dir + '/' + 'all_translation_rmse' + FORMAT, bbox_inches="tight", dpi=args.dpi) plt.close(fig) fig = plt.figure(figsize=(6, 3)) ax = fig.add_subplot(111, xlabel='Datasets', ylabel='Rotation RMSE (deg)') pu.boxplot_compare(ax, labels, [algorithm_rmse['rot_err'][v] for v in algorithm_names], config_labels, config_colors) fig.tight_layout() fig.savefig(output_dir + '/' + 'all_rotation_rmse' + FORMAT, bbox_inches="tight", dpi=args.dpi) plt.close(fig)
def plot_overall_odometry_errors(overall_err, output_dir): print("Plotting overall error...") n_config = len(overall_err['trans_err']) assert n_config == len(overall_err['trans_err_perc']) assert n_config == len(overall_err['yaw_err']) config_labels = [] config_colors = [] for v in overall_err['trans_err'].keys(): config_labels.append(PLOT_LABELS[v]) config_colors.append(COLORS[v]) # absolute error fig = plt.figure(figsize=(6, 2.5)) ax = fig.add_subplot(111, xlabel='Distance traveled [m]', ylabel='Translation error [m]') pu.boxplot_compare(ax, overall_err['distances'], overall_err['trans_err'].values(), config_labels, config_colors, ymax=0.15) fig.tight_layout() fig.savefig(output_dir + '/overall_rel_translation_error' + FORMAT, bbox_inches="tight") plt.close(fig) # relative error fig = plt.figure(figsize=(6, 2.5)) ax = fig.add_subplot(111, xlabel='Distance traveled [m]', ylabel='Translation error [\%]') pu.boxplot_compare(ax, overall_err['distances'], overall_err['trans_err_perc'].values(), config_labels, config_colors) fig.tight_layout() fig.savefig(output_dir + '/overall_rel_translation_error_percentage' + FORMAT, bbox_inches="tight") plt.close(fig) # yaw orientation error fig = plt.figure(figsize=(6, 2.5)) ax = fig.add_subplot(111, xlabel='Distance traveled [m]', ylabel='Yaw error [deg]') pu.boxplot_compare(ax, overall_err['distances'], overall_err['yaw_err'].values(), config_labels, config_colors) fig.tight_layout() fig.savefig(output_dir + '/overall_rel_yaw_error' + FORMAT, bbox_inches="tight") plt.close(fig)
def plot_odometry_error_per_dataset(dataset_rel_err, dataset_names, out_dir): for dataset_idx, dataset_nm in enumerate(dataset_names): print("Plotting {0}...".format(dataset_nm)) rel_err = dataset_rel_err[dataset_idx] distances = rel_err['subtraj_len'] config_labels = [] config_colors = [] for v in rel_err['trans_err'].keys(): config_labels.append(PLOT_LABELS[v]) config_colors.append(COLORS[v]) fig = plt.figure(figsize=(6, 2.5)) ax = fig.add_subplot(111, xlabel='Distance traveled [m]', ylabel='Translation error [m]') pu.boxplot_compare(ax, distances, rel_err['trans_err'].values(), config_labels, config_colors, ymax=0.15) fig.tight_layout() fig.savefig(output_dir + '/' + dataset_nm + '_translation_error' + FORMAT, bbox_inches="tight") plt.close(fig) # relative error fig = plt.figure(figsize=(6, 2.5)) ax = fig.add_subplot(111, xlabel='Distance traveled [m]', ylabel='Translation error [\%]') pu.boxplot_compare(ax, distances, rel_err['trans_err_perc'].values(), config_labels, config_colors) fig.tight_layout() fig.savefig(output_dir + '/' + dataset_nm + '_translation_error_percentage' + FORMAT, bbox_inches="tight") plt.close(fig) # yaw orientation error fig = plt.figure(figsize=(6, 2.5)) ax = fig.add_subplot(111, xlabel='Distance traveled [m]', ylabel='Yaw error [deg]') pu.boxplot_compare(ax, distances, rel_err['ang_yaw_err'].values(), config_labels, config_colors) fig.tight_layout() fig.savefig(output_dir + '/' + dataset_nm + '_yaw_error' + FORMAT, bbox_inches="tight") plt.close(fig)
print(">>> Plotting relative (odometry) error...") distances = traj.preset_boxplot_distances rel_trans_err = [[traj.rel_errors[d]['rel_trans'] for d in distances]] rel_trans_err_perc = [[ traj.rel_errors[d]['rel_trans_perc'] for d in distances ]] rel_yaw_err = [[traj.rel_errors[d]['rel_yaw'] for d in distances]] labels = ['Estimate'] colors = ['b'] fig = plt.figure(figsize=(6, 2.5)) ax = fig.add_subplot(111, xlabel='Distance traveled [m]', ylabel='Translation error [m]') pu.boxplot_compare(ax, distances, rel_trans_err, labels, colors) fig.tight_layout() fig.savefig(plots_dir + '/rel_translation_error' + FORMAT, bbox_inches="tight") plt.close(fig) fig = plt.figure(figsize=(6, 2.5)) ax = fig.add_subplot(111, xlabel='Distance traveled [m]', ylabel='Translation error [\%]') pu.boxplot_compare(ax, distances, rel_trans_err_perc, labels, colors) fig.tight_layout() fig.savefig(plots_dir + '/rel_translation_error_perc' + FORMAT, bbox_inches="tight") plt.close(fig)
suffix = '' if n_trials > 1: suffix = '_mt' plot_types = ['rel_trans', 'rel_trans_perc', 'rel_yaw'] rel_errors, distances = mt_error.get_relative_errors_and_distances( error_types=plot_types) labels = ['Estimate'] colors = ['b'] fig = plt.figure(figsize=(6, 2.5)) ax = fig.add_subplot(111, xlabel='Distance traveled [m]', ylabel='Translation error [m]') pu.boxplot_compare(ax, distances, rel_errors['rel_trans'], labels, colors) fig.tight_layout() fig.savefig(plot_dir_i + '/rel_translation_error' + suffix + FORMAT, bbox_inches="tight") plt.close(fig) fig = plt.figure(figsize=(6, 2.5)) ax = fig.add_subplot(111, xlabel='Distance traveled [m]', ylabel='Translation error [\%]') pu.boxplot_compare(ax, distances, rel_errors['rel_trans_perc'], labels, colors) fig.tight_layout() fig.savefig(plot_dir_i + '/rel_translation_error_perc' + suffix + FORMAT, bbox_inches="tight")