Ten minutes from now you will have a real signal on a real plot — and, more importantly, you will understand the handful of ideas every other PlotJuggler workflow is built from: loading data, dragging signals onto a plot, navigating the timeline, and saving the view as a layout. This walkthrough works for both current lines, PlotJuggler 4 (4.0.0) and the classic PlotJuggler 3 (3.17.2), because the core workflow is the one thing the PJ4 rewrite deliberately kept. All nine guides in this series are collected on the Tutorials hub.
Before you start (2 minutes)
- A working install. If PlotJuggler is not on your machine yet, follow the Install guides for your platform first — Windows, Ubuntu, ROS 2 and macOS are covered, and the files with their checksums are on the Download page.
- A small data file. A short CSV export is the friendliest first file; a ROS bag, MCAP recording or PX4 ULog works too. Keep it small for the first run — you are learning the tool, not stress-testing it (PlotJuggler is built for thousands of series and millions of points, but that is for later).
- Know your line. PJ4 and PJ3 look similar and work similarly, but a few details differ. This guide flags the differences where they matter.
Step 1 — Open PlotJuggler and look around
Launch the application and take stock before touching any data. The interface is organised around three ideas: a list of the signals available in your data, a plotting area where signals become curves, and a timeline you can scrub, zoom and pan. PlotJuggler renders with OpenGL, which is why it stays responsive with very large recordings once you get there. Do not worry about panels you do not recognise yet — streaming controls, transform editors and (in PJ4) video and 3D views all build on the basics you are about to use.
Step 2 — Load your first file by drag-and-drop
The documented way to bring data in is deliberately simple: drag the file into the PlotJuggler window and drop it. PlotJuggler works out which loader handles the file — CSV, PX4 ULog, ROS bags and (in PJ4) MCAP, Parquet and more are all supported formats — and reads it in. When the load finishes, the signals contained in the file appear in the signal list. If you used a CSV, you have just exercised the workflow our CSV import tutorial covers in depth, including what to do when a CSV needs a timestamp column sorted out first. Bag and MCAP users get the same treatment in the ROS bag and MCAP tutorial.
Step 3 — Put signals on a plot
This is the gesture the whole tool is named around: drag a signal from the list and drop it onto the plotting area. A curve appears, drawn against time. Drag a second signal onto the same plot to overlay it — comparing related signals on shared axes is the most common analysis move there is. Drag a signal to a fresh area instead if you want it on its own plot, stacked with the others and sharing the timeline. A few habits worth forming immediately:
- Start with two or three signals, not thirty. Add more only when you know what question each one answers.
- Overlay signals that share a unit or a story (commanded vs measured, left vs right). Unrelated signals deserve separate plots.
- If a curve looks flat, check its scale against the others before assuming the data is wrong — a small signal next to a large one is easy to miss.
Step 4 — Navigate the timeline
With curves on screen, learn to move: zoom into a short interval to inspect detail, pan along the recording, and zoom back out to recover context. Everything in PlotJuggler shares one timeline, so zooming reframes every plot at once — and in PJ4 it also reframes any video or 3D view you have open, which is the heart of its multimodal workflow. Practise on an event you can identify in your test file: find it, zoom to it, zoom out. That loop — overview, zoom, inspect, overview — is 90% of daily work in this tool.
Step 5 — Try one transform
Transforms turn the series you logged into the series you actually wanted. Before writing anything custom, meet the built-ins: PlotJuggler offers ready-made transforms such as the derivative, moving average, integral and scale operations (PJ4 adds filters and FFT to the same toolbox). Apply a moving average to a noisy signal and plot the result next to the original: the derived series behaves like any other curve. When a built-in is not enough, the Custom Function Editor lets you define your own computation — that is the subject of the Lua custom functions tutorial.
Step 6 — Save the view as a layout
You have built something worth keeping: a chosen set of plots, curves and zoom. PlotJuggler saves that arrangement as a layout you can reload against the same data — or the same kind of data — later, instead of rebuilding it by hand. Save one now, close the plots, and reload it to prove the round trip works. Layouts deserve their own guide, and have one: Saving and Sharing PlotJuggler Layouts covers what is stored, how sharing works, and the PJ4 layout schema v4 note.
If something did not work
- The file loaded but no signals appeared. The file may need a loader or plugin your install lacks — ROS bags in PJ3, for example, come through the ROS plugin set; see the ROS bag and MCAP tutorial.
- The CSV plotted against row numbers. Your file’s time column was not recognised as time — the fix is in the CSV import tutorial.
- Signals start at different times. Normal for multi-device recordings; align them with the time offset tutorial rather than fighting the timeline.
Where to go next
You now hold the core workflow: load, drag, navigate, transform, save. Deepen it in the order that matches your data — CSV import or ROS bags and MCAP for loading, XY plots for signal-against-signal views, and live streaming when you are ready to watch data arrive in real time. The full path is mapped on the Tutorials hub.
