Skip to main content

A fluent, chainable wrapper around matplotlib for building modern, publication-ready plots with less boilerplate.

Project description

quickploteasy

A fluent, chainable wrapper around matplotlib for building better-looking plots and histograms with less boilerplate.

pip install quickploteasy

quickploteasy aims for charts that look like a senior analyst made them — minimalist, decluttered, and finished by default. It ships the modern Inter typeface, wraps every plot in an editorial headline / subtitle / source frame, and styles the marks themselves: bars get rounded tops and bold value labels (and drop the redundant y-axis when every bar is labelled), one bar or series can carry the accent while the rest recede to gray, line/area charts are directly labelled at their end instead of via a legend, box plots come filled with a colourblind-checked palette, and area charts fade out with a gradient. The palette and chrome are the validated reference instance from a data-viz design method, stepped separately for light and dark surfaces.

Instead of juggling fig, ax = plt.subplots(), styling calls, and label setters, you describe a plot as a single readable chain:

import quickploteasy as qp

(qp.plot()
   .bar(regions, sales, highlight="max")     # gray context, accent on the peak
   .labels(
       title="The West region led the quarter",
       subtitle="Net sales by region ($M)",
       source="Source: internal figures",
   )
   .save("sales.png"))

Install (development)

This project uses a src/ layout and pyproject.toml. With uv:

uv sync --extra dev      # create a venv and install deps + dev tools
uv run pytest            # run the test suite
uv run ruff check .      # lint

API at a glance

Start a chain with qp.plot(data). data can be an array-like, a dict, or a pandas DataFrame (reference columns by name).

Conventional forms

Method Description
.hist(data=None, bins="auto", kde=False) Histogram; kde=True overlays a smooth density curve
.line(x=None, y=None, fill=False) Line plot; fill=True adds a gradient area
.area(x=None, y=None) Line with a gradient area fill (shorthand for line(fill=True))
.scatter(x, y) Scatter plot
.bar(x, y, values=True, highlight=None) Bar chart; highlight takes an index / "max" / "min" to accent one bar
.box(data=None, group_labels=None) Filled box plot with readable group labels

Modern forms (the reason to reach for quickploteasy)

Method Description
.lollipop(x, y, highlight=None) A lighter bar chart — stem + dot, great for many categories
.ridgeline(groups, labels=None) Overlapping density "mountains" to compare a distribution across groups
.raincloud(data, group_labels=None) Half-violin + jittered raw points + slim box — the modern box-plot replacement

Overlaying multiple series (e.g. two .hist() calls) automatically advances through the palette so each series gets a distinct hue. A labelled line/area series is labelled directly at its end point; other labelled marks get a legend.

Text & styling

.title(text) (headline), .subtitle(text), .source(text) (footnote), .xlabel(text), .ylabel(text), .labels(title=, subtitle=, x=, y=, source=), .xlim(lo, hi), .ylim(lo, hi), .grid(bool), .legend(), .theme(name)

Finishing

.save(path), .show(), .render() (returns the underlying (fig, ax) for escape-hatch customization), .close()

Themes

Built-in themes: light (default), dark, minimal. Each theme bundles a categorical palette (colourblind-checked, stepped for its surface) with chrome roles — surface, primary/secondary ink, hairline grid, soft baseline. Themes are applied locally per-figure via rc_context, so they never mutate your global matplotlib state. List them with qp.themes().

qp.plot(data, theme="dark")   # set at construction (preferred)
qp.plot(data).hist().theme("dark")  # or switch in the chain

Status

Early alpha (0.1.0). The fluent core is in place; more chart types, faceting, and a pandas-first convenience layer are on the roadmap.

License

quickploteasy is released under the MIT License. It bundles the Inter typeface, which is licensed separately under the SIL Open Font License 1.1 (see Inter-LICENSE.txt).

Publishing

Packaging and release instructions live in PUBLISHING.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

quickploteasy-0.1.0.tar.gz (682.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

quickploteasy-0.1.0-py3-none-any.whl (682.5 kB view details)

Uploaded Python 3

File details

Details for the file quickploteasy-0.1.0.tar.gz.

File metadata

  • Download URL: quickploteasy-0.1.0.tar.gz
  • Upload date:
  • Size: 682.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.9

File hashes

Hashes for quickploteasy-0.1.0.tar.gz
Algorithm Hash digest
SHA256 821f42ae28bb4bf5c462bcafa84d8395ec9c48b380432f10c6939894120563af
MD5 8e686b5ba10ea4fbe6b93e0d791a1261
BLAKE2b-256 ebffa92c7619e2204319a66ad16f9e3a59d1d293a43613f68122f0151b84851b

See more details on using hashes here.

File details

Details for the file quickploteasy-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: quickploteasy-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 682.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.9

File hashes

Hashes for quickploteasy-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 408f68e96f96bae9e4ffd222957bbbf9c28365f81f9c355d6f2da52b3dfeae5d
MD5 4b3ce053adc52fd3e9455b1ec13690f9
BLAKE2b-256 eb42fada760e0e07554451a4728b99349aa91ad49d16f826af0d049fe5810c71

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page