A user-friendly graph builder with matplotlib backend for creating publication-quality plots from TSV data
Project description
Plottini
A user-friendly graph builder for creating publication-quality plots from TSV data
Overview
Plottini is designed for researchers, scientists, and anyone who needs to create high-quality graphs from tabular data without writing code. With an intuitive web-based UI powered by NiceGUI and matplotlib as the rendering backend, Plottini makes it easy to:
- Load TSV data files with automatic validation
- Create various chart types (line, bar, scatter, histogram, and more)
- Apply mathematical transformations to your data
- Overlay multiple datasets on the same plot
- Export publication-ready figures in PNG, SVG, PDF, or EPS formats
Features
Core Capabilities
- Multiple data sources: Load one or more TSV files with configurable headers and comment delimiters
- Rich chart types: Line, Bar, Pie, Scatter, Histogram, Polar, Box, Violin, Area, and more
- Data transformations: Apply preset functions (log, sqrt, power, trig functions) to your data
- Derived columns: Create computed columns using safe mathematical expressions
- Data filtering: Filter rows by value ranges before plotting
- Multi-file alignment: Align multiple datasets by a common column
- Secondary Y-axis: Display two different scales on the same plot
- Live preview: See your changes in real-time as you configure your plot
- Publication quality: Colorblind-safe palettes and professional styling by default
Export Options
- Formats: PNG, SVG, PDF, EPS
- Configurable DPI: High-resolution output for publications
- Vector formats: Scalable graphics for presentations and papers
Advanced Features
- Configuration files: Expert users can use TOML files for reproducible workflows
- Headless rendering: Batch processing without the UI
- Detailed error messages: Clear, actionable feedback for data issues
Installation
From PyPI
pip install plottini
From Source
git clone https://github.com/lanthoor/plottini.git
cd plottini
pip install -e .
Quick Start
Start the UI
plottini
This will start the web interface on http://localhost:8050 and automatically open it in your browser.
Command-Line Options
# Start on a specific port
plottini --port 8080
# Don't open browser automatically
plottini --no-open
# Load a configuration file
plottini --config my-graph.toml
Expert Mode: Headless Rendering
For automation and batch processing:
plottini render --config my-graph.toml --output figure.png
Usage
1. Load Your Data
- Click "+ Add Files" to load one or more TSV files
- Toggle "Has header row" if your files have column names
- Set comment characters (default:
#)
2. Preview Your Data
- View a paginated table of your parsed data
- Verify that all values were correctly interpreted as numbers
3. Configure Series
- Select which columns to plot on X and Y axes
- Choose colors, line styles, and markers
- Apply transformations (log scale, square root, etc.)
- Use secondary Y-axis for different scales
4. Customize Plot Settings
- Select chart type
- Add title and axis labels
- Configure grid, legend, and figure size
- Adjust font sizes for publication
5. Advanced Options
- Derived Columns: Create new columns from expressions like
col1 / col2 - Filters: Exclude data outside specified ranges
- Multi-file Alignment: Merge datasets by a common column
- Layout: Overlay series or create separate subplots
6. Export
- Choose format: PNG, SVG, PDF, or EPS
- Set DPI for raster formats
- Click "Export" to save your figure
Configuration File Format
For reproducible workflows, you can create a TOML configuration file:
# my-graph.toml
[[files]]
path = "data/experiment1.tsv"
has_header = true
comment_chars = ["#"]
[[series]]
x = "time"
y = "velocity"
label = "Experiment 1"
color = "#0072B2"
transform_y = "log10"
[plot]
type = "line"
title = "Velocity over Time"
x_label = "Time (s)"
y_label = "Velocity (m/s)"
figure_width = 10.0
figure_height = 6.0
[export]
format = "png"
dpi = 300
Load it with:
plottini --config my-graph.toml
Or render directly:
plottini render --config my-graph.toml --output velocity.png
See PLAN.md for the complete configuration specification.
Supported Chart Types
| Category | Chart Types |
|---|---|
| Basic | Line, Scatter, Bar (vertical/horizontal) |
| Statistical | Histogram, Box plot, Violin plot |
| Area | Area, Stacked area |
| Specialized | Stem, Step, Error bar, Pie, Polar |
Mathematical Transformations
Available preset transformations:
- Logarithmic: log, log10, log2
- Power: square, cube, sqrt, cbrt
- Trigonometric: sin, cos, tan, arcsin, arccos, arctan
- Other: abs, inverse (1/x), exp, negate
Derived Columns: Create custom expressions like:
col1 / col2sqrt(col1**2 + col2**2)0.5 * mass * velocity**2
Requirements
- Python 3.10 or higher
- matplotlib ≥ 3.7
- numpy ≥ 1.24
- nicegui ≥ 1.4
- click ≥ 8.1
Documentation
- PLAN.md - Complete implementation plan and technical specifications
- CONTRIBUTING.md - Development setup and contribution guidelines
- AGENTS.md - Instructions for AI agents working on the project
Contributing
Contributions are welcome! Please see CONTRIBUTING.md for:
- Development setup instructions
- Code style guidelines
- Testing requirements
- Pull request process
Roadmap
See PLAN.md for the detailed implementation plan.
Current Status: Phase 5 - Polish & Testing
- Project structure
- Package configuration
- CLI framework
- CI/CD pipelines
- TSV Parser implementation
- DataFrame implementation
- Basic plotting (Line, Bar, Pie)
- Extended charts (Scatter, Histogram, Polar, Box, Violin, Area, etc.)
- Export functionality (PNG, SVG, PDF, EPS)
- Data transformations and derived columns
- Multi-file support and alignment
- Secondary Y-axis support
- Configuration system (TOML)
- UI implementation with NiceGUI
- Headless render mode
- Final documentation and polish
License
MIT License - see LICENSE file for details.
Copyright (c) 2025 Lallu Anthoor
Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Author: Lallu Anthoor (dev@spendly.co.in)
Acknowledgments
Built with:
- matplotlib - The plotting backend
- NiceGUI - The web UI framework
- Click - CLI framework
- NumPy - Numerical computing
Plottini - Making publication-quality graphs accessible to everyone.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file plottini-2026.2.0.tar.gz.
File metadata
- Download URL: plottini-2026.2.0.tar.gz
- Upload date:
- Size: 88.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
03ce4d8128bf840e12a7630f025644a0df2508aeb5d9cc9d166653606df7b251
|
|
| MD5 |
f8af3549f454a6f4b13e584a3fbebb76
|
|
| BLAKE2b-256 |
9ff01f43426960b85130ac23aaa55dd5de559e2ca0bcb0d4497937165884b9e9
|
Provenance
The following attestation bundles were made for plottini-2026.2.0.tar.gz:
Publisher:
publish.yml on lanthoor/plottini
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
plottini-2026.2.0.tar.gz -
Subject digest:
03ce4d8128bf840e12a7630f025644a0df2508aeb5d9cc9d166653606df7b251 - Sigstore transparency entry: 974623388
- Sigstore integration time:
-
Permalink:
lanthoor/plottini@5b1124e612c2a4e1037a093454f22f167bc29fc8 -
Branch / Tag:
refs/tags/v2026.02.1 - Owner: https://github.com/lanthoor
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5b1124e612c2a4e1037a093454f22f167bc29fc8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file plottini-2026.2.0-py3-none-any.whl.
File metadata
- Download URL: plottini-2026.2.0-py3-none-any.whl
- Upload date:
- Size: 49.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6a0f4574a75af22fd25dabb02bcbd4e7833681a0b018c50a03f7440e385d427e
|
|
| MD5 |
fb24001741e7aa42a0ebc224ea699840
|
|
| BLAKE2b-256 |
fbfd6410fc0b54fe0559abfc0db2fb33f81b666b3ae75f45697f43fe96b864a4
|
Provenance
The following attestation bundles were made for plottini-2026.2.0-py3-none-any.whl:
Publisher:
publish.yml on lanthoor/plottini
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
plottini-2026.2.0-py3-none-any.whl -
Subject digest:
6a0f4574a75af22fd25dabb02bcbd4e7833681a0b018c50a03f7440e385d427e - Sigstore transparency entry: 974623397
- Sigstore integration time:
-
Permalink:
lanthoor/plottini@5b1124e612c2a4e1037a093454f22f167bc29fc8 -
Branch / Tag:
refs/tags/v2026.02.1 - Owner: https://github.com/lanthoor
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5b1124e612c2a4e1037a093454f22f167bc29fc8 -
Trigger Event:
push
-
Statement type: