PhysPlot is a scientific plotting and workflow automation application for researchers, engineers, and students who require fast, reproducible, publication-quality figures without relying on large commercial software packages.
Originally conceived in 2019 following a suggestion from Dr. Muhammad Sabieh Anwar, PhysPlot has evolved into a modular scientific plotting platform supporting graphical workflows, reusable plotting protocols, and automated batch processing.
The workflow is intentionally simple:
Load Data
↓
Assign Column Roles
↓
Apply Transformations
↓
Generate Publication-Quality Plot
↓
Save Workflow
↓
Reuse or Run in Bulk
- Scientific plotting desktop application built with PyQt
- Publication-quality figure generation
- Spreadsheet-style data editor
- CSV, TXT, Excel, Nanoindentation, and DataFrame support
- Dynamic data loaders
- Dynamic mathematical transformation modules
- Modular plotting architecture
- Figure templates
- Reusable workflow protocols
- Automated batch processing
- Headless command-line execution
- Python API
- 84 Matplotlib plot types in gallery categories, with column roles that follow the plot type
- Built-in Figure Editor: click any part of a figure to restyle it, export in any format
- Open data files straight from Finder or Explorer (right-click > Open With > PhysPlot)
- Plugin-friendly architecture
Short live recordings of PhysPlot, one per feature. Click a thumbnail to watch it on YouTube. The same videos play inside the matching pages of the documentation.
PhysPlot Basics: Simple Mode, from typing data to curve fitting. It starts with 0. Install PhysPlot on Windows (2:10), from a fresh Windows 11 to PhysPlot in the Start menu.
PhysPlot Advanced: recorded
protocols, Sequence.py files, bulk runs, and writing your own file loaders and plotter
modules.
![]() 1. Recorded Protocol · 0:17 |
![]() 2. Saving a Sequence · 0:12 |
![]() 3. Bulk Processing · 0:21 |
![]() 4. New File Loader · 1:52 |
![]() 5. New Plotter Module · 2:01 |
![]() 6. Bulk OES Spectra · 1:21 |
PhysPlot is developed on three branches. Pick the one that matches how much change you want:
| Branch | Channel | Purpose | Who it is for | Documentation |
|---|---|---|---|---|
main |
Stable | Tested releases. Changes arrive here only after they have been used on indevelopment. |
Everyday use, teaching, lab work. | main |
indevelopment |
Development | The next release. New work is finished and reviewed here; it is the repository's default branch and builds the default documentation. | Trying new features before a release; contributors. | latest (default) |
bleedingedge |
Bleeding edge | Experiments and the newest features first (for example new plot types and editor tools). It may break; what works well moves on to indevelopment. |
Early testers who want the newest features and can report problems. | bleedingedge |
Changes flow bleedingedge → indevelopment → main.
Install a particular branch. The one-command installers below install main
(Stable). For another branch, set PHYSPLOT_REF, for example on macOS:
curl -fsSL https://raw.githubusercontent.com/MShirazAhmad/PhysPlot/main/scripts/install_macos.sh | PHYSPLOT_REF=bleedingedge bashand on Windows (PowerShell):
$env:PHYSPLOT_REF='bleedingedge'; irm https://raw.githubusercontent.com/MShirazAhmad/PhysPlot/main/scripts/install_windows.ps1 | iexUse indevelopment for the Development branch. From source, check
out the branch with git clone -b <branch> https://github.com/MShirazAhmad/PhysPlot.git.
Open Terminal and paste:
curl -fsSL https://raw.githubusercontent.com/MShirazAhmad/PhysPlot/main/scripts/install_macos.sh | bashThe script finds Python 3.12–3.14 (or installs Python 3.12 with Homebrew), installs
PhysPlot and its dependencies into ~/.physplot, and creates PhysPlot.app in
~/Applications. Run it again to update; uninstall with
rm -rf ~/.physplot ~/Applications/PhysPlot.app.
Open PowerShell (right-click the Start button → Terminal) and paste:
irm https://raw.githubusercontent.com/MShirazAhmad/PhysPlot/main/scripts/install_windows.ps1 | iexNothing needs to be installed first. The script finds Python 3.12–3.14, or installs
Python 3.12 for you (with winget, or from python.org), installs PhysPlot and its
dependencies into %LOCALAPPDATA%\PhysPlot, and adds a PhysPlot Start-menu
shortcut. Close PhysPlot and run it again to update.
To uninstall, close PhysPlot and run:
irm https://raw.githubusercontent.com/MShirazAhmad/PhysPlot/main/scripts/uninstall_windows.ps1 | iexIt removes PhysPlot, its Start-menu shortcut, the Open with entries and its settings,
and keeps your files in Documents\PhysPlot and Python. Run
$env:PHYSPLOT_REMOVE_USER_FILES = "1" and/or $env:PHYSPLOT_REMOVE_PYTHON = "1"
first to remove those too (removing Python affects other programs that use it).
Video: Install PhysPlot on Windows (2:10), on a fresh Windows 11 with no Python.
A classic setup program can be built with scripts/build_windows_installer.ps1; when a
release on the Releases page
includes PhysPlot-<version>-Windows-Setup.exe, you can download that instead.
Clone the repository:
git clone https://github.com/MShirazAhmad/PhysPlot.git
cd PhysPlotCreate a virtual environment:
/opt/homebrew/opt/python@3.12/bin/python3.12 -m venv .venv
source .venv/bin/activateVerify Python:
python --versionExpected output:
Python 3.12.x
Upgrade pip and install the project requirements:
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"Launch PhysPlot:
.venv/bin/python -m physplot_guiWhen the virtual environment is activated, the console entry point is also available:
physplot-guiPhysPlot has been tested with:
| Component | Version |
|---|---|
| Python | 3.12.x (Homebrew) |
| Operating System | macOS (Apple Silicon) |
The package metadata in pyproject.toml is the source of truth for runtime and development dependencies. requirements.txt mirrors the runtime dependencies for environments that require requirements-file installs.
Complete project documentation is available online.
-
Documentation https://physplot.readthedocs.io/
-
Video tutorials (YouTube playlists) PhysPlot Basics · PhysPlot Advanced
-
GitHub Repository https://github.com/MShirazAhmad/PhysPlot
-
Issue Tracker https://github.com/MShirazAhmad/PhysPlot/issues
Additional project documentation:
- Maintainer Project Guide
- Contributing Guide
- Trademark and Branding
The graphical interface follows a table-first workflow.
- Import Data
- Apply Mathematical Transformations
- Select Plot Module
- Apply Figure Template
- Generate Plot
- Edit Figure
- Export Figure
Create, edit, save, and reuse Python workflow protocols.
Execute saved workflows on entire folders for automated batch processing.
PhysPlot can also be used directly from Python.
from physplot import PhysPlot
pp = PhysPlot()
pp.load("data.csv")
pp.set_roles(
x="Time",
y="Voltage"
)
fig = pp.plot_with_module(
"basic",
"scatter"
)Show version:
physplot --versionRun a workflow:
physplot run-workflow workflow.py \
--input data.csv \
--output outputs/runRun batch processing:
physplot run-bulk workflow.py \
--input-folder data \
--output-folder outputs/batch- CSV
- TXT
- Microsoft Excel
- Nanoindentation datasets
- Pandas DataFrames
PhysPlot source code is licensed under the PolyForm Noncommercial License 1.0.0.
You may:
- Study the source code
- Fork the repository
- Modify the software for noncommercial purposes
- Submit improvements through pull requests
Commercial use requires prior written permission from the project originator.
Documentation, tutorials, screenshots, and educational material are licensed under the Creative Commons Attribution–NonCommercial 4.0 International (CC BY-NC 4.0) unless otherwise noted.
The PhysPlot name, logo, application icon, GUI branding, and visual identity remain reserved by the project originator. Modified versions must not be represented as official PhysPlot releases.
For contribution policies and branding guidelines, see:
CONTRIBUTING.mdTRADEMARK.md















