Minimalist plotting defaults for Matplotlib.
Project description
SignalPlot
SignalPlot is a minimalist plotting library built on pure Matplotlib. It enforces clean defaults that prioritize data over decoration. Every figure aims for clarity, scale honesty, and visual restraint.
SignalPlot targets analysts, engineers, and researchers who want publication ready plots without manual styling work. The library avoids high level styling layers and works directly with Matplotlib primitives.
Design Philosophy
SignalPlot treats plots as analytical instruments. The figure should communicate structure, variation, and scale with minimal distraction. Decorative elements dilute interpretation. Honest axes preserve trust.
The style favors light backgrounds, thin spines, restrained color, and direct annotation. Figures remain readable in print, slides, and reports.
The visual approach draws inspiration from Edward Tufte, William Cleveland, and John Tukey. SignalPlot does not reproduce any single doctrine. It applies practical principles that improve readability and analytical trust.
What SignalPlot Does
SignalPlot applies a consistent minimalist style to Matplotlib figures. It removes unnecessary chart elements. It enforces honest scales. It standardizes typography and spacing. It saves figures at publication quality resolution by default.
The library stays small by design. It does not wrap Matplotlib. It sets disciplined defaults and provides a few helpers for common patterns.
What SignalPlot Does Not Do
SignalPlot does not depend on Seaborn or any high level styling framework. It does not add decorative themes. It does not alter data or exaggerate effects. It does not hide Matplotlib behavior behind abstractions.
Style Contract
Figures use a white or near white background. Primary data appears in black or dark gray. Secondary elements appear in lighter gray. One accent color may appear for emphasis.
Top and right spines remain hidden. Left and bottom spines stay thin and light. Gridlines appear only on the y axis and remain subtle.
Axes labels remain optional. Titles carry descriptive meaning. Direct labels replace legends when practical. Typography stays consistent and modest.
Bar charts start at zero. Scales remain linear unless data demands otherwise.
Always
- Use pure Matplotlib: rely on Matplotlib primitives, not styling wrappers or theme systems.
- Keep the palette restrained: black or dark gray for primary data, medium gray for secondary structure, and a single red accent (via
signalplot.ACCENT) for emphasis only. - Remove chartjunk: no 3D, shadows, gradients, or decorative textures.
- Keep framing light: hide top and right spines; keep left and bottom spines thin, light, and just outside the data where appropriate.
- Prefer minimal grids: at most subtle y-axis gridlines when they genuinely aid reading values; avoid x-axis grids unless essential.
- Let titles carry meaning: prefer descriptive titles and direct labels on lines/bars/points; fall back to legends only when direct labels are impractical.
- Use consistent typography: a clean sans-serif font, modest font sizes, and rare emphasis (bold/italics only when needed).
- Export at publication quality: save figures at 300 DPI with tight bounding boxes and a white background (SignalPlot’s defaults via
apply()andsave()).
Never
- Never rely on high-level styling libraries: avoid seaborn and similar systems for appearance; SignalPlot assumes plain Matplotlib.
- Never add decorative clutter: skip extra gridlines, borders, background colors, and ornaments that do not improve interpretation.
- Never use more than one strong accent color: additional emphasis should come from position, annotation, or form, not a rainbow palette.
- Never distort axes or scales: do not truncate axes to exaggerate effects; bar charts, in particular, should start the y-axis at zero.
Installation
SignalPlot installs like any small Python utility.
pip install signalplot
Basic Usage
Import SignalPlot once at the start of your script. Create plots with standard Matplotlib calls. SignalPlot applies its defaults automatically.
import matplotlib.pyplot as plt
import signalplot
signalplot.apply()
plt.plot(x, y)
plt.title("Monthly demand by region")
plt.savefig("monthly_demand.png", dpi=300, bbox_inches="tight", facecolor="white")
plt.show()
Intended Audience
SignalPlot serves practitioners who care about analytical integrity. It fits academic work, internal reports, policy analysis, and engineering workflows. It favors repeatability and trust over style experimentation.
License
MIT License.
Name
SignalPlot reflects the core promise. High signal. Low noise.
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 signalplot-0.1.2.tar.gz.
File metadata
- Download URL: signalplot-0.1.2.tar.gz
- Upload date:
- Size: 11.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
325fd62f8c89c20833e70ebccbac31d61d3b3c69b9f7ad1e996be161304f31c7
|
|
| MD5 |
d0e72c8aa040f686314a7f8a93aea37f
|
|
| BLAKE2b-256 |
94ba67af2360344f3e17ddc3540f68ead7594a4e096c351a1cce66f343377dbe
|
Provenance
The following attestation bundles were made for signalplot-0.1.2.tar.gz:
Publisher:
workflow.yml on kylejones200/signalplot
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
signalplot-0.1.2.tar.gz -
Subject digest:
325fd62f8c89c20833e70ebccbac31d61d3b3c69b9f7ad1e996be161304f31c7 - Sigstore transparency entry: 773521902
- Sigstore integration time:
-
Permalink:
kylejones200/signalplot@d23dafde5233f4576c692c8b08fe19736a194626 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/kylejones200
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@d23dafde5233f4576c692c8b08fe19736a194626 -
Trigger Event:
push
-
Statement type:
File details
Details for the file signalplot-0.1.2-py3-none-any.whl.
File metadata
- Download URL: signalplot-0.1.2-py3-none-any.whl
- Upload date:
- Size: 10.1 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 |
c49049b710dba54171b9f46535558e643f5b140d8b6f706d503945d73a2a6b9e
|
|
| MD5 |
96e7bda2d490f67973bb0c7234ecd42d
|
|
| BLAKE2b-256 |
6eee4cd48b2f86dc511a4e931af6a4f2941af3466d54eb18a0a89606657f54c7
|
Provenance
The following attestation bundles were made for signalplot-0.1.2-py3-none-any.whl:
Publisher:
workflow.yml on kylejones200/signalplot
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
signalplot-0.1.2-py3-none-any.whl -
Subject digest:
c49049b710dba54171b9f46535558e643f5b140d8b6f706d503945d73a2a6b9e - Sigstore transparency entry: 773521918
- Sigstore integration time:
-
Permalink:
kylejones200/signalplot@d23dafde5233f4576c692c8b08fe19736a194626 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/kylejones200
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@d23dafde5233f4576c692c8b08fe19736a194626 -
Trigger Event:
push
-
Statement type: