Skip to main content

License: GPL v3 C++20 PyPi Documentation

SciQLopPlots

A high-performance scientific plotting library built on C++20/Qt6 with Python bindings via Shiboken6 (PySide6). Designed for the SciQLop data analysis platform but usable standalone.

Try it in your browser: the gallery runs the same library as WebAssembly, with examples you can edit and run. The JavaScript guide shows how to use it in your own pages.

Features

  • Async resampling — render millions of points smoothly; data is downsampled in background threads via NeoQCP pipelines
  • Multiple plot types — time series (line graphs), spectrograms (color maps), 2D histograms, parametric curves, N-D projection curves, waterfall plots
  • Interactive — pan, zoom, data-driven callbacks, vertical/horizontal/rectangular spans, tracers, straight lines, text, shapes, pixmaps
  • Multi-plot panels — synchronized axes, aligned margins, drag-and-drop from product trees
  • Interval timelines — events and instrument modes as bars on named lanes, drawn like a logic analyzer's wave view; overlaps stacked by time or category, or forbidden; editable with the mouse
  • Reactive pipelines — connect plot properties with >> to build live data flows
  • Export — PDF (vector), PNG, JPG, BMP for both individual plots and panels
  • Busy indicator — visual feedback when data is loading or being processed
  • Runtime inspector — tree model/view for inspecting and editing plot properties
  • Signal processing — gap-aware filters, FFT, spectrograms and rolling statistics on NumPy arrays (SciQLopPlots.dsp)
  • In the browser — the same plots from JavaScript, compiled to WebAssembly (gallery, guide)
  • Cross-platform — Linux, macOS and Windows, on x86-64 and ARM64

Architecture

Your Python code or web page goes through the bindings to the C++ library: panels hold plots, plots hold plottables and items. It draws with NeoQCP on Qt 6.

Data flow

A pan or zoom calls your data function on its own thread, worker threads reduce the points to what the pixels can show, and the main thread draws them.

Quick start

The user guide walks through everything below and more: plot types, live data, time series, panels, overlays, pipelines and export. Every example in it is tested. The API reference lists every class and method.

pip install SciQLopPlots

Wheels exist for Python 3.11 to 3.14. They pin PySide6 to an exact version, so installing replaces any other PySide6 in the environment.

import numpy as np
from PySide6.QtWidgets import QApplication
from SciQLopPlots import SciQLopPlot

app = QApplication([])
plot = SciQLopPlot()

# Static data and a data function, both on the same plot
x = np.arange(0, 1000, dtype=np.float64)
y = np.sin(x / 100) * np.cos(x / 10)
plot.plot(x, y, labels=["signal"])

# Data callback (called on pan/zoom with visible range)
def get_data(start, stop):
    x = np.arange(start, stop, dtype=np.float64)
    y = np.column_stack([np.sin(x / 100), np.cos(x / 100)])
    return x, y

plot.plot(get_data, labels=["sin", "cos"])

plot.show()
app.exec()

Reactive pipelines

Connect plot properties with the >> operator, optionally through a function:

import numpy as np
from PySide6.QtGui import QColor
from SciQLopPlots import SciQLopPlot, SciQLopVerticalSpan, SciQLopPlotRange

plot = SciQLopPlot()
x = np.linspace(0, 10, 1000)
plot.plot(x, np.sin(x), labels=["sin"])
span = SciQLopVerticalSpan(plot, SciQLopPlotRange(2.0, 4.0), QColor(100, 200, 100, 80),
                           read_only=False, visible=True, tool_tip="")

def describe(event):
    return f"{event.value.start():.2f} .. {event.value.stop():.2f}"

span.on.range >> describe >> span.on.tooltip   # the tooltip follows the span

zoomed = SciQLopPlot()
zoomed.plot(x, np.sin(x), labels=["zoom"])
span.on.range >> zoomed.x_axis().on.range      # a second plot shows the span's interval

The function gets an event whose .value is the new value. The user guide lists the properties you can connect.

To see every feature, try the browser gallery, or run the desktop gallery from a source checkout:

python tests/manual-tests/gallery.py

Runtime tracing

SciQLopPlots ships with a built-in tracer that emits Chrome trace JSON, viewable in Perfetto, Speedscope, or chrome://tracing. Always compiled in, runtime-toggled, ~1 ns when off.

Enable for a session, then open the file in Perfetto:

from SciQLopPlots import tracing

with tracing.session("/tmp/sciqlop.json"):
    do_the_slow_thing()         # your code here

Annotate your own Python work so it shows next to the C++ zones (plot.replot, setdata.colormap, resample.async_2d, …). speasy and q below stand for your own code:

with tracing.zone("speasy.fetch", cat="data", product="amda/mms_fgm"):
    data = speasy.get_data(...)

@tracing.traced("layer.eval", cat="layer")
def render_layer(layer): ...

tracing.counter("queue_depth", q.size(), cat="fetch")

You can also auto-enable at process start with the SCIQLOP_TRACE env var:

SCIQLOP_TRACE=/tmp/sciqlop.json python my_script.py

When tracy_enable=true is also passed at build time, the same PROFILE_HERE_N sites feed both the Chrome JSON tracer and the Tracy live-streaming view.

Building from source

You need Qt 6.11, a C++20 compiler, libclang (for Shiboken) and, in a virtual environment, the exact PySide6 version the package pins:

pip install pyside6==6.11.2 shiboken6==6.11.2 shiboken6-generator==6.11.2 \
    numpy meson meson-python ninja

# Qt's tools must be on PATH
export PATH=/path/to/Qt/6.11.2/gcc_64/bin:$PATH
export PKG_CONFIG_PATH=/path/to/Qt/6.11.2/gcc_64/lib/pkgconfig:$PKG_CONFIG_PATH

# debugoptimized, not debug: without optimisations the resampling is slow
meson setup build --buildtype=debugoptimized
meson compile -C build

# or build and install it as a Python package
pip install . --no-build-isolation

The browser build is described in the JavaScript guide.

Build options

Option Type Default Description
trace_refcount bool false Enable reference count tracing
tracy_enable bool false Enable Tracy profiling
with_opengl bool true Enable OpenGL support

Contributing

Fork the repository, make your changes and submit a pull request. Bug reports and feature requests are welcome.

Credits

Development is supported by CDPP. We acknowledge support from Plas@Par.

Thanks

  • PySide6 — Qt bindings and Shiboken6 binding generator
  • NeoQCP — fork of QCustomPlot with async pipelines, multi-dtype support, and QRhi rendering

Metadata

Release files for SciQLopPlots 0.52.0

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

Source distribution (sdist)

Source distribution for SciQLopPlots 0.52.0
File Size Uploaded
sciqlopplots-0.52.0.tar.gz 4.8 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for SciQLopPlots 0.52.0
File
sciqlopplots-0.52.0-cp311-abi3-win_arm64.whl CPython 3.11 abi3 Windows ARM64 Details
sciqlopplots-0.52.0-cp311-abi3-win_amd64.whl CPython 3.11 abi3 Windows x86-64 Details
sciqlopplots-0.52.0-cp311-abi3-manylinux_2_39_aarch64.whl CPython 3.11 abi3 Linux glibc 2.39+ ARM64 Details
sciqlopplots-0.52.0-cp311-abi3-manylinux_2_34_x86_64.whl CPython 3.11 abi3 Linux glibc 2.34+ x86-64 Details
sciqlopplots-0.52.0-cp311-abi3-macosx_13_0_x86_64.whl CPython 3.11 abi3 macOS 13.0+ x86-64 Details
sciqlopplots-0.52.0-cp311-abi3-macosx_13_0_arm64.whl CPython 3.11 abi3 macOS 13.0+ ARM64 Details

Total release size: 39.3 MB

Release files / sciqlopplots-0.52.0.tar.gz

Download URL sciqlopplots-0.52.0.tar.gz
Size 4.8 MB
Tags Source
SHA-256 checksum
How to use checksums
7eca9248cdcff2ead67042013241b29daf466cc7e034824b1bdedb7218f5ff14
BLAKE2b-256 checksum
How to use checksums
2dc16d0287cdf471bfeae249421646c0255df2617653f03df9c1d3e96c76c19e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / sciqlopplots-0.52.0-cp311-abi3-win_arm64.whl

Download URL sciqlopplots-0.52.0-cp311-abi3-win_arm64.whl
Size 4.8 MB
Tags CPython 3.11 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
8ec8f7c776f9af6074a1aabc30de571f8da10f1e14f52e83f7961dd870f1b588
BLAKE2b-256 checksum
How to use checksums
f319afe1b54d175e71d3692aefa49f4017e70a10675330bc428d303a30ee97b6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / sciqlopplots-0.52.0-cp311-abi3-win_amd64.whl

Download URL sciqlopplots-0.52.0-cp311-abi3-win_amd64.whl
Size 4.5 MB
Tags CPython 3.11 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
a2ef40ef4aab3c46d681897429cfef871b837cb0a9e49e8fb538fc3bf5ba2138
BLAKE2b-256 checksum
How to use checksums
c644aed4321445cffcd0192e61b7c5c103006a1791ca05320755f540fdd73dcc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / sciqlopplots-0.52.0-cp311-abi3-manylinux_2_39_aarch64.whl

Download URL sciqlopplots-0.52.0-cp311-abi3-manylinux_2_39_aarch64.whl
Size 6.7 MB
Tags CPython 3.11 Linux glibc 2.39+ ARM64 abi3
SHA-256 checksum
How to use checksums
6af9990a708bfc63bdf4c270d2dd358097f010607c1799d0b6b18d9f5a017667
BLAKE2b-256 checksum
How to use checksums
dc678d91e70f795d56299ae3e859ffb790a2ad9e80768eedf1abc4c60edf0164
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / sciqlopplots-0.52.0-cp311-abi3-manylinux_2_34_x86_64.whl

Download URL sciqlopplots-0.52.0-cp311-abi3-manylinux_2_34_x86_64.whl
Size 7.2 MB
Tags CPython 3.11 Linux glibc 2.34+ x86-64 abi3
SHA-256 checksum
How to use checksums
ac015cf8c195a5caa3f9a347da8703e0cddf53cabaa095e9af90e8ee5f1dbee2
BLAKE2b-256 checksum
How to use checksums
4934141d10478b42dcea2b689e22f8280003af9bee22f8937c3acb61ff1dce0b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / sciqlopplots-0.52.0-cp311-abi3-macosx_13_0_x86_64.whl

Download URL sciqlopplots-0.52.0-cp311-abi3-macosx_13_0_x86_64.whl
Size 5.8 MB
Tags CPython 3.11 abi3 macOS 13.0+ x86-64
SHA-256 checksum
How to use checksums
132fe634696b01c8c623e42ce10799243dc21ec4a6f8125d28acbeb11aafed7d
BLAKE2b-256 checksum
How to use checksums
be7fbe8caf01a2f55aa1a897f065c5c4220f6b9a42d936bb5c1ad251b88acd0c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / sciqlopplots-0.52.0-cp311-abi3-macosx_13_0_arm64.whl

Download URL sciqlopplots-0.52.0-cp311-abi3-macosx_13_0_arm64.whl
Size 5.4 MB
Tags CPython 3.11 abi3 macOS 13.0+ ARM64
SHA-256 checksum
How to use checksums
096f76ec8b661d2447e74fbbd76dc5b3d5961f5e963fea0fd455dc6f4f585ffe
BLAKE2b-256 checksum
How to use checksums
cc52a23bfb7ff2bf3ec3ef41d9371d9c84b98f9ad17223d898bf79dddb41957c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

0.52.0 This release

7 release files

0.51.3

7 release files

0.51.2

7 release files

0.51.1

7 release files

0.51.0

7 release files

0.50.1

7 release files

0.42.1

7 release files

0.42.0

6 release files

0.41.0

6 release files

0.9.0

16 release files

0.8.2

16 release files

0.8.1

16 release files

0.8.0

16 release files

0.7.1

16 release files

0.7.0

18 release files

0.6.5

18 release files

0.6.4

18 release files

0.6.3

20 release files

0.6.2

20 release files

0.6.1

20 release files

0.6.0

20 release files

0.5.0

15 release files

0.4.3

12 release files

0.3.4

9 release files

0.3.3

9 release files

0.2.6

9 release files

0.2.5

9 release files

0.2.4

9 release files

0.2.2

5 release files

0.1.8

9 release files

0.1.7

9 release files

0.1.6

9 release files

0.1.5

9 release files

0.1.4

9 release files

0.1.3

9 release files

0.1.2

9 release files

0.1.1

9 release files

0.1.0

5 release files

0.0.7

9 release files

0.0.3

7 release files

0.0.1

1 release file

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