Skip to content

Plotting

Michael Grupp edited this page Sep 9, 2024 · 25 revisions

There are several settings that allow you to change the appearance of plots.

In the command line apps, take a look at parameters like --plot, --plot_mode etc. More general, package-wide settings can be set via evo_config set (see "Configuration" section). Have a look at evo_config show to see all available settings and their current values.

Example configuration for print-quality plots

This is an example walkthrough for how you could theoretically change the plot settings to produce high-quality plots for print (thesis, paper...).

1. Set the plot grid and background

The default plot settings have a dark background. This looks good on the screen, but is not suitable for printing. We can change the background to a grid with white background by changing the style parameter of Seaborn with:

evo_config set plot_seaborn_style whitegrid

2. Set the font type and scale

The default font doesn't really fit to the rest of our paper, which uses a serif font. The relative size of the text labels in the plot figure could also be increased for better readability. We can switch to a serif font with larger scale by calling:

evo_config set plot_fontfamily serif plot_fontscale 1.2

To match the smaller font, we also reduce the line width:

evo_config set plot_linewidth 1.0

There are some other things you can change, for example the line style of the reference trajectory:

evo_config set plot_reference_linestyle -

3. Set the default figure size

You can adjust the default plot figure size, too. For example to a width of 5 and a height of 4.5:

evo_config set plot_figsize 5 4.5

The setting corresponds to the figsize of matplotlib in inches. See also: https://matplotlib.org/stable/gallery/subplots_axes_and_figures/figure_size_units.html

4. Use LaTeX renderer

Because we use LaTeX to write the paper, we want to render the fonts of the plots with LaTeX, too:

evo_config set plot_usetex

You may need to change the plot_texsystem parameter to the LaTeX system that's installed on your machine if this doesn't work on the first try, see evo_config show.

Advanced: plots can be also exported in pgf format (--save_plot plot.pgf).

5. Restore default settings

evo_config reset

Coordinate axis markers

Coordinate axis markers can be activated by setting plot_axis_marker_scale to a non-zero value, for example:

evo_config set plot_axis_marker_scale 0.1

Reference trajectories have a separate parameter plot_reference_axis_marker_scale:

evo_config set plot_reference_axis_marker_scale 0.1

You probably need to play around with this scale value to adjust it to the size of your trajectories. Set it to 0 again if you don't need it anymore.

Start and end markers

evo_config set plot_start_end_markers true

Start is marked with a circle, the end with a cross.

Pose correspondence markers

You can enable markers that connect the reference trajectory's poses with the corresponding poses in the other trajectories. This setting applies to evo_ape and evo_rpe, but also to evo_traj if you specify a --ref reference and the other trajectories are either synced or aligned.

Activate:

evo_config set plot_pose_correspondences true

Changing the length unit

You can scale the axis ticks of trajectory plots to a different length unit. This can be useful if you have data at very small scale (cm, mm; e.g. from a phone) or very large (km; e.g. from a car). Note that this does not alter the data, it only changes the plot appearance.

Example:

evo_config set plot_trajectory_length_unit km

2D ROS maps

You can insert 2D maps that follow the ROS map_server format into plots. The format is described here: http://wiki.ros.org/map_server#Map_format

Given that you have such a pair of files (map.pgm and map.yaml), just add --ros_map_yaml map.yaml and the map will be shown in addition to the trajectories:

Note that this follows the ROS convention:

  • the map is assumed to be in the x-y plane, so it will be only shown in the xy/yx plot modes
  • the image will be transformed to the x-y plane's origin as specified in the .yaml file

Masking

In the above image the unknown cells of the map grid are not shown. To make this work, you might have to tweak the setting for the uint8 value that represents unknown cells in a ROS map image. ROS' standard map_saver uses 205, other tools might not (for example, Cartographer uses 128 for images of probability grids):

evo_config set ros_map_unknown_cell_value 128

But this can also be completely disabled. Then the bounding box of the map will be visible.

evo_config set ros_map_enable_masking false

Viewport

You can define how the viewport will change when you plot a map by choosing one of the settings:

evo_config set ros_map_viewport {keep_unchanged, update, zoom_to_map}

This is especially useful when saving plots automatically and you don't want to edit the view manually all the time.

keep_unchanged

update

zoom_to_map

Geographic Map Tiles

If you have geo-referenced data, you can add a map tile to the plot. Map tiles are downloaded at runtime using the contextily library.

Example plot using UTM-referenced data:

evo_traj tum georeferenced.tum --plot_mode xy --plot --map_tile epsg:32632

The default map tile provider is OpenStreetMap.Mapnik. You can choose different map tile providers that are supported by contextily / xyzservices. These can be set in evo using the map_tile_provider parameter. Example:

evo_config set map_tile_provider CartoDB.Positron

Some providers may require an API token. Then you additionally also need to set the token:

evo_config set map_tile_provider HEREv3.basicMap map_tile_api_token <your token>