Skip to main content

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() and save()).

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

Documentation

Guides (defaults, saving, axes, labels, interoperability) and the full API live on GitHub Pages, built from the docs/ directory when changes land on the default branch. The same sources build locally with Sphinx (see CONTRIBUTING.md).

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.

Contributing

See CONTRIBUTING.md for environment setup, local checks, and docs builds. Maintainer releases are summarized in RELEASING.md. Priorities and ideas are collected in ROADMAP.md. Notable releases are listed in CHANGELOG.md.

License

MIT License.

Name

SignalPlot reflects the core promise. High signal. Low noise.

Metadata

Release files for signalplot 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for signalplot 0.1.3
File Size Uploaded Provenance Actions
signalplot-0.1.3.tar.gz 13.3 kB With provenance Details for signalplot-0.1.3.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for signalplot 0.1.3
File Interpreter ABI Platform Actions
signalplot-0.1.3-py3-none-any.whl Python 3 none any Details for signalplot-0.1.3-py3-none-any.whl

Total release size: 23.9 kB

Release files / signalplot-0.1.3.tar.gz

Download URL signalplot-0.1.3.tar.gz
Size 13.3 kB
Tags Source
SHA-256 checksum
How to use checksums
a9872df76c2ceb17954154dba5be32253241fa6448b1637a163d8c30d80e0c85
BLAKE2b-256 checksum
How to use checksums
411021ad9dfedd0536829e2cbd147c9675aba0aab913d485112ba6869df54cb4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 21, 2026.

Transparency log

Release files / signalplot-0.1.3-py3-none-any.whl

Download URL signalplot-0.1.3-py3-none-any.whl
Size 10.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f04b3c1ac75a43b0bf18f39b73b4492ccf6364db093c4001704ee7e63fb20dad
BLAKE2b-256 checksum
How to use checksums
06002033197730f1252ce946f74c295cbf3322512ed1e2aca1f91ea326f0f22d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 21, 2026.

Transparency log

Security for signalplot 0.1.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for signalplot-0.1.3.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 21, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page