Metadata-Version: 2.4
Name: toucan-plot
Version: 0.2.3
Summary: A versatile PyQt6 and Matplotlib-based plotting tool for CSV and SMV data files.
License-Expression: MIT
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pyqt6>=6.0
Requires-Dist: matplotlib>=3.0
Requires-Dist: numpy>=1.20
Requires-Dist: pyqtdarktheme>=2.1.0
Requires-Dist: scienceplots>=2.2.1
Requires-Dist: python-can>=4.0
Requires-Dist: cantools>=39.0
Requires-Dist: asammdf>=7.0
Dynamic: license-file

# Toucan-Plot

An interactive PyQt6 + Matplotlib plotting tool for CSV, SMV, and CAN bus log files.

![Python](https://img.shields.io/badge/python-3.11+-blue)
![License](https://img.shields.io/badge/license-MIT-green)

## Features

### Supported File Formats

| Format           | Description                                                  |
|------------------|--------------------------------------------------------------|
| `.csv` / `.smv`  | Comma or semicolon delimited data (auto-detected)            |
| `.mf4` / `.mf4z` | ASAM MDF v4 measurement data (via asammdf)                   |
| `.blf`           | CAN bus binary log                                           |
| `.trc`           | CAN bus trace log                                            |
| `.asc`           | CAN bus ASCII log                                            |
| `.dbc`           | CAN database for signal decoding (required with BLF/TRC/ASC) |

- Auto-detects `Time` / `timestamp` columns as the default X axis
- CAN signals are forward-fill interpolated and named as `Message.Signal`

### Plot Interaction

- **Shared X axis** across all subplots with linked panning and zooming
- **Secondary Y axis** support per series
- **Double-click** a subplot to edit its series, or **right-click** for a context menu
- **Measure cursors** — two draggable vertical cursors with a live delta table
- **Expression evaluator** — create computed series from math expressions (e.g. `sin("series_A") + "series_B" * 2`)
- **Multi-file merge** — overlay series from different files, each in its own tab
- **X axis switching** — reassign the X column without losing subplot configuration
- **Per-series properties** (label, color, linewidth, linestyle, marker) persisted across all redraws
- Live mouse coordinates in the status bar

### Toolbar

| Button         | Action                                  |
|----------------|-----------------------------------------|
| Home           | Auto-fit all axes                       |
| Back / Forward | Navigate view history                   |
| Pan            | Pan mode                                |
| Zoom           | Zoom rectangle mode                     |
| Customize      | Matplotlib per-curve property editor    |
| Save           | Export figure to file                   |
| Add subplot    | Open the series selector                |
| Fit Y          | Auto-fit Y axis keeping current X range |
| Measure        | Toggle measure cursors                  |
| X axis         | Select X axis column                    |

### Menus

- **File → Open** (`Ctrl+O`) — open one or more files (multi-select)
- **File → Merge** (`Ctrl+M`) — append files to the current session
- **Style → Customize plot style** — preset, line mode, marker, text size, grid, legend
- **Style → Theme** — Dark / Light (icons swap automatically)

### Right-Click Context Menu

- Add subplot above / below
- Delete subplot
- Legend: show/hide, position (14 options), orientation, text size
- Line style: plot / step

### Style Presets

Four built-in presets: **Default**, **Style 1**, **IEEE**, **Other**.

## Installation

### From PyPI (recommended)

Install the released package from PyPI:

```shell
pip install toucan-plot
```

## Usage

```shell
# Open a CSV file
toucan-plot data.csv

# Open an MF4 measurement file
toucan-plot recording.mf4

# Open a CAN log with DBC decoding
toucan-plot recording.blf signals.dbc

# Open multiple files (merge mode)
toucan-plot file1.csv file2.csv

# Launch without files
toucan-plot
```

## Requirements

- Python ≥ 3.11
- PyQt6
- Matplotlib
- NumPy
- pyqtdarktheme
- SciencePlots
- python-can (for CAN log files)
- cantools (for DBC decoding)
- asammdf (for MF4 files)

## License

MIT
