Schultz Lab · NCCU 26 plot types

Scientific data
visualization,
simplified

Matplotlib, Seaborn, and Plotly — unified behind one clean API and a 14-page point-and-click Streamlit GUI. From raw files to publication figures in minutes.

Python 3.9–3.12 · 900+ tests · MIT License
26
Plot types
18
File formats
14
GUI pages
900+
Tests

Everything in one toolkit

From raw data upload to publication figures — without switching tools or writing boilerplate.

📊
26 Plot Types

Scatter, line, bar, histogram, box, violin, heatmap, contour, 3D surface, regression, and more — in Matplotlib, Seaborn, or interactive Plotly. Annotation overlays included.

🖱️
14-Page Streamlit GUI

Data upload, quick plotting, analysis tools, multi-plot dashboards, spectroscopy, molecular visualization, batch analysis, and export — all point-and-click, no code required.

📁
18 File Formats

CSV, Excel, TSV, JSON, Parquet, NumPy, Pickle, JCAMP-DX, HDF5, NetCDF, SPC, ASC, mzML/mzXML, and more. Auto-detected from file extension via a single load_data() call.

🧮
Analysis Tools

25+ math functions covering statistics, curve fitting (Gaussian, Lorentzian, Voigt), signal processing (FFT, smoothing, baseline), peak finding, and hypothesis testing.

🔬
Spectroscopy Module

Dedicated tools for IR/Raman, NMR, UV-Vis, and mass spectrometry. Built-in NIST WebBook integration fetches reference spectra by CAS number. 3D molecular visualization from Gaussian/ORCA output files.

🔌
Plugin System

Drop a plugin_*.py file into plugins/ to add custom plot types or analysis tools. Discovered and loaded automatically at startup.

Plot types at a glance

Static, statistical, and interactive — pick the library that fits your workflow.

Scatter Line Bar Histogram Box Violin Heatmap Contour 3D Surface Regression Distribution Pair Plot Strip / Swarm Error Bars Stem Step Area Pie / Donut Polar Radar Interactive Scatter Interactive Line Interactive Heatmap Interactive Histogram Interactive 3D Spectral

Matplotlib → static/print  ·  Seaborn → statistical  ·  Plotly → interactive/web

Supported file formats

One function reads them all. Format is detected from the file extension automatically.

Tabular
.csv .tsv .xlsx / .xls .json .parquet
Array / Serialized
.npy .npz .pkl
Instrument / Spectral
.jdx / .dx .h5 / .hdf5 .nc / .cdf .spc .asc .mzml .mzxml
Instrument data: JCAMP-DX (.jdx/.dx) handles IR and Raman spectra from most benchtop instruments. HDF5 and NetCDF cover large array datasets from simulations or time-series experiments. SPC files work with Thermo Fisher instruments.

Quick installation

Clone the repository and run with the provided setup scripts — no terminal experience required.

bash
git clone https://github.com/The-Schultz-Lab/plottle.git
cd plottle

# Windows — double-click setup.bat, then launch.bat
# macOS   — double-click setup.command, then launch.command

# Or from the terminal:
python -m venv .venv
source .venv/bin/activate  # macOS/Linux
# .venv\Scripts\activate  # Windows
pip install -r requirements.txt
streamlit run modules/Home.py
Try it instantly: launch Plottle in your browser with no installation via Binder.

Python API

Use Plottle from scripts or Jupyter notebooks for reproducible, programmatic analysis.

python
from plottle.io import load_data
from plottle.plotting import line_plot, save_figure
import numpy as np

# Simulate a UV-Vis absorption spectrum
wavelength  = np.linspace(400, 800, 200)
absorbance  = 0.8 * np.exp(-((wavelength - 520) ** 2) / (2 * 30 ** 2))

# Plot — returns (fig, ax, info) for Matplotlib plots
fig, ax, info = line_plot(
    wavelength, [absorbance],
    xlabel='Wavelength (nm)',
    ylabel='Absorbance',
    title='UV-Vis Spectrum',
    labels=['Sample A'],
)
save_figure(fig, 'spectrum.png', dpi=300)

# Load any of the 18 supported formats automatically
df = load_data('experiment.jdx')   # JCAMP-DX
df = load_data('data.hdf5')        # HDF5
df = load_data('results.csv')      # CSV
Module What it provides
plottle.io load_data() / save_data() — auto-detects format from extension
plottle.plotting 26 plot functions; Matplotlib returns (fig, ax, info), Plotly returns (fig, info)
plottle.math 25 functions — statistics, curve fitting, hypothesis tests, optimization, linear algebra
plottle.signal 16 functions — smoothing, filtering, FFT, derivatives, baseline correction, interpolation
plottle.peaks Find, integrate, FWHM, fit (Gaussian / Lorentzian / Voigt / pseudo-Voigt)
plottle.spectroscopy 18 functions — IR/Raman, UV-Vis, NMR, mass spectrometry
plottle.nist NIST WebBook integration — fetch IR spectra by CAS number
plottle.data_tools 12 non-destructive DataFrame operations (normalize, pivot, merge, resample, …)
plottle.annotations 7 overlay types — hline, vline, span, text, rectangle, ellipse
plottle.report PDF report generation via matplotlib.PdfPages

14-page Streamlit GUI

A full exploratory data analysis environment in the browser — no coding required.

# Page What you can do
Home Dashboard Overview, help tabs, recent sessions
1 Data Upload 18 formats, shape/type preview, batch folder import
2 Quick Plot 26 plot types, live style controls, annotation panel, Plotly toggle
3 Analysis Tools 8 tabs: Statistics, Distribution, Curve Fit, Optimization, Linear Algebra, Signal, Peaks, Hypothesis Tests
4 Multi-Plot Dashboard Up to 4×4 grid, axis sharing, combined PNG/PDF export
5 Advanced Plotting Seaborn statistical plots and Plotly interactive charts with HTML export
7 Export Results Plots, data, and analyses; save/load full sessions; PDF reports
8 Gallery Pre-generated figure gallery with Load this config buttons
9 Data Tools 10 tabs: formula columns, normalize, transpose, pivot/melt, filter, merge, resample, rolling…
10 Spectroscopy IR/Raman, NMR, UV-Vis, MS tools; NIST WebBook lookup by CAS number
11 Molecular Viz Gaussian/ORCA/Molden output files; 3D structure and vibrational mode display
12 Batch Analysis Batch statistics, curve fitting, and peak analysis with workflow presets
13 Help Getting Started, Plot Types, Analysis Tools, Formats, Tips
14 Settings Theme, DPI, plot defaults, named preset CRUD, plugin status

Command-line interface

Five subcommands for batch processing and scripted workflows.

bash
# Generate a scatter plot from any supported file format
plottle plot data.csv --plot scatter --x-column x --y-column y

# Descriptive statistics summary
plottle stats data.csv

# Batch processing from a JSON config
plottle batch config.json --verbose

# Side-by-side comparison of two datasets
plottle compare before.csv after.csv --plot line --output comparison.png

# Convert between supported formats
plottle convert spectrum.jdx spectrum.csv