PlotJuggler Tutorials: Learn to Plot, Transform and Stream Your Data
PlotJuggler is easy to open and surprisingly deep to master. Under the drag-and-drop surface sit file loaders for CSV, ROS bags, MCAP and ULog files, per-signal time offsets, XY plots, a Lua scripting engine for custom transforms, savable layouts, and live streaming over WebSocket, MQTT, ZeroMQ and UDP. These tutorials walk that whole surface in a sensible order — no prior PlotJuggler experience assumed, and every guide states clearly whether it describes PlotJuggler 3 (3.17.2), PlotJuggler 4 (4.0.0), or both. This hub is an independent, unofficial guide; the program itself comes from the official releases on our Download page.
The learning path
Work through the four stages in order if you are new. If you already plot data confidently, jump straight to the stage that matches your problem — each tutorial is self-contained and cross-links the guides it depends on.
| Stage | What you learn | Start with |
|---|---|---|
| 1. Start here | Open PlotJuggler, load a first file by drag-and-drop, put signals on a plot, navigate the timeline and save your view. | Getting Started with PlotJuggler |
| 2. Load data | Bring in the files you actually have: CSV exports, ROS 1 / ROS 2 bags and MCAP recordings — and load several recordings at once to compare them. | CSV import · ROS bag & MCAP |
| 3. Transform | Align signals that start at different times, plot one signal against another, and compute new series with built-in transforms and Lua custom functions. | Time offset · Lua custom functions |
| 4. Stream & reuse | Watch live data as it arrives, and capture a good view as a layout you can reload and share with your team. | Live streaming · Layouts |
All nine tutorials
- Getting Started with PlotJuggler: Your First Plot in 10 Minutes — install check, first file, first signals on a plot, timeline navigation, and saving the view.
- How to Import and Plot CSV Files in PlotJuggler — the timestamp column, choosing series, and the CSV problems that stop a file from plotting.
- How to Open ROS Bag and MCAP Files in PlotJuggler — ROS 1 bags via the PJ3 ROS plugins, rosbag2/MCAP in the ROS 2 plugin set, and native MCAP in PJ4.
- How to Compare Multiple Bag Files in PlotJuggler — overlay several recordings fairly, with PJ4 per-dataset offsets and the careful PJ3 workflow.
- PlotJuggler Time Offset: Align Signals That Start at Different Times — the T=0 idea, per-curve and per-dataset offsets, and a step-by-step alignment workflow.
- How to Make XY Plots in PlotJuggler — one signal against another: trajectories, phase relationships and how to read them.
- PlotJuggler Lua Custom Functions: Build Your Own Transforms — the multi-input, single-output Custom Function Editor, the built-in transforms to try first, and the PX4 quaternion pattern.
- Saving and Sharing PlotJuggler Layouts — what a layout stores, save and reload workflows, sharing with a team, and the PJ4 layout schema v4 note.
- Live Streaming to PlotJuggler: WebSocket, MQTT, ZMQ and UDP — the PJ3 streamers, JSON/CBOR/BSON/MessagePack encodings, a labelled JSON example, and PJ4 WebRTC.
New in PlotJuggler 4? Start with the PJ4 guides
Several tutorials above describe behaviour that differs between generations — multiple-recording overlays, per-dataset offsets and the layout format among them. If you are on the new line, these six guides from our PlotJuggler 4 section give you the background:
- What’s New in PlotJuggler 4.0 — video, 3D, Python scripting, new formats and the Marketplace.
- PlotJuggler 3 vs PlotJuggler 4: Should You Upgrade? — the honest side-by-side, including the ROS factor.
- Migrating from PlotJuggler 3 to PlotJuggler 4 — what carries over, what changes, and how to run both lines side by side.
- PlotJuggler 4 Python Scripting — Python custom transforms alongside Lua, and how to choose.
- PlotJuggler 4 Video and 3D Visualisation — time-synced cameras, point clouds, meshes and URDF models.
- PlotJuggler Extensions Marketplace — installing loaders, streamers, parsers and toolboxes in PJ4.
- PlotJuggler 4 hub — the whole PJ4 section in one page.
Before the tutorials: get installed
Every tutorial assumes a working PlotJuggler. If you have not installed it yet — or you are not sure which line you have — start with the Install hub: Windows, Ubuntu, ROS 2 and macOS guides for both PJ4 and PJ3, plus the troubleshooting guide for installs that will not start. Files and SHA-256 checksums are on the Download page. Two version facts worth fixing in your mind before you read further: PJ4 4.0.0 (21 September 2026) is the current release and a ground-up rewrite, while PJ3 3.17.2 is the classic line the ROS ecosystem still runs on. Neither is a mistake to learn — but they are not identical, and these tutorials say which one each workflow belongs to.
This site is independently operated and is not affiliated with Davide Faconti or the PlotJuggler project. The official project site is plotjuggler.io.
