Skip to main content

License: GPL v3 C++20 PyPi Coverage

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.

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
  • 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
  • Cross-platform — Linux, macOS, Windows

Architecture

graph TD
    subgraph Python["Python Layer"]
        PY[SciQLopPlots package]
        SB[Shiboken6 bindings]
    end

    subgraph Plots["Plot Hierarchy"]
        PI[SciQLopPlotInterface<br/><i>QFrame</i>]
        SP[SciQLopPlot]
        TSP[SciQLopTimeSeriesPlot]
        NDP[SciQLopNDProjectionPlot]
    end

    subgraph Plotables["Plotables"]
        PTI[SciQLopPlottableInterface<br/><i>QObject</i>]
        GI[SciQLopGraphInterface]
        CMI[SciQLopColorMapInterface]
        LG[SciQLopLineGraph]
        SLG[SciQLopSingleLineGraph]
        CRV[SciQLopCurve]
        WF[SciQLopWaterfallGraph]
        NDC[SciQLopNDProjectionCurves]
        CMB[SciQLopColorMapBase]
        CM[SciQLopColorMap]
        H2D[SciQLopHistogram2D]
    end

    subgraph Items["Overlay Items"]
        VS[VerticalSpan]
        HS[HorizontalSpan]
        RS[RectangularSpan]
        TR[Tracer]
        SL[StraightLine]
    end

    subgraph MultiPlot["Multi-Plot"]
        PPI[SciQLopPlotPanelInterface]
        MPP[SciQLopMultiPlotPanel]
        AX[AxisSynchronizer]
        VA[VPlotsAlign]
    end

    PY --> SB --> PI

    PI --> SP
    PI --> NDP
    SP --> TSP

    PTI --> GI
    PTI --> CMI
    GI --> LG
    GI --> SLG
    GI --> CRV
    GI --> WF
    GI --> NDC
    CMI --> CMB
    CMB --> CM
    CMB --> H2D

    PPI --> MPP
    MPP --> AX
    MPP --> VA

    SP -.->|contains| PTI
    SP -.->|contains| Items
    MPP -.->|contains| SP

Data flow

sequenceDiagram
    participant User
    participant Plot as SciQLopPlot
    participant Resampler as Resampler<br/>(worker thread)
    participant NeoQCP as NeoQCP

    User->>Plot: pan / zoom
    Plot->>Resampler: new visible range
    Resampler->>Resampler: downsample data
    Resampler->>NeoQCP: resampled points
    NeoQCP->>Plot: render

For callback-driven data, the plot invokes a Python callable with (start, stop) on range change, and the returned arrays flow through the same resampling pipeline.

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.

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

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

# Static data
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 to build live data pipelines:

from SciQLopPlots import SciQLopPlot

plot = SciQLopPlot()
graph = plot.plot(lambda start, stop: ..., labels=["signal"])

# Axis range changes automatically feed a transform, which pushes data to the graph
plot.x_axis().on.range >> get_data >> graph.on.data

# Direct property forwarding (no transform)
span.on.range >> plot.x_axis().on.range

# Chain multiple steps
source.on.range >> transform >> target.on.data

Run the gallery for a full feature showcase:

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"):
    panel.zoom_in_a_lot()       # whatever's slow

Annotate Python work to land alongside the C++ zones (plot.replot, setdata.colormap, resample.async_2d, …):

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

@tracing.traced("layer.eval", cat="layer")
def render_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

Requires Qt6, PySide6 == 6.11.0, a C++20 compiler, and Meson.

# Development build (recommended — plain `debug` disables optimizations
# and makes the resampling pipelines noticeably sluggish)
meson setup build --buildtype=debugoptimized
meson compile -C build

# Install as editable Python package
pip install -e . --no-build-isolation

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.44.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.44.0
File Size Uploaded
sciqlopplots-0.44.0.tar.gz 1.9 MB Details

Built distributions (wheels)

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

Total release size: 37.8 MB

Release files / sciqlopplots-0.44.0.tar.gz

Download URL sciqlopplots-0.44.0.tar.gz
Size 1.9 MB
Tags Source
SHA-256 checksum
How to use checksums
05190137b84129bb6c70b08a9f74884bd9d3a7da843840b09d55702910e161fb
BLAKE2b-256 checksum
How to use checksums
39d6457e338d72383c1e427c653f9ee72ea6964c03384b9c44421eaf52206c0c
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.44.0-cp311-abi3-win_arm64.whl

Download URL sciqlopplots-0.44.0-cp311-abi3-win_arm64.whl
Size 4.8 MB
Tags CPython 3.11 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
7e5a5f5ea916508ee4589ea0b3e4483a7bd7194c0b73b9cfd93a19a509341c10
BLAKE2b-256 checksum
How to use checksums
339f744a12012baf2ffe5797005a9c02d06a6eefc036b131cd49d63fce2573a3
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.44.0-cp311-abi3-win_amd64.whl

Download URL sciqlopplots-0.44.0-cp311-abi3-win_amd64.whl
Size 4.6 MB
Tags CPython 3.11 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
4045ef0276fe5238c96884d352b979b495a50987ff78763283cdd5bb39aee1bb
BLAKE2b-256 checksum
How to use checksums
5a6100291f3924fb6a0a887f8c8d02a968377c1790ea168021e881937c8743cf
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.44.0-cp311-abi3-manylinux_2_39_aarch64.whl

Download URL sciqlopplots-0.44.0-cp311-abi3-manylinux_2_39_aarch64.whl
Size 6.9 MB
Tags CPython 3.11 Linux glibc 2.39+ ARM64 abi3
SHA-256 checksum
How to use checksums
2e45c39f2d5103699a0839d27f7c53e2af2afe2839a8b199d5b15476d3acc354
BLAKE2b-256 checksum
How to use checksums
5672e6f40a0f914208ddd0e45bc4b4b80dfedd9a3f0f4ab5f5de4a6595251a02
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.44.0-cp311-abi3-manylinux_2_34_x86_64.whl

Download URL sciqlopplots-0.44.0-cp311-abi3-manylinux_2_34_x86_64.whl
Size 7.4 MB
Tags CPython 3.11 Linux glibc 2.34+ x86-64 abi3
SHA-256 checksum
How to use checksums
2a75b0ea04a2aba8b160d206ede9cee8d44faa3a73f2cfde0b9ad638121b8c02
BLAKE2b-256 checksum
How to use checksums
4ca43d2a15d88f6586a7c3f9bdfb7c1d163615a0c3db463c18c322c7140461d3
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.44.0-cp311-abi3-macosx_13_0_x86_64.whl

Download URL sciqlopplots-0.44.0-cp311-abi3-macosx_13_0_x86_64.whl
Size 6.3 MB
Tags CPython 3.11 abi3 macOS 13.0+ x86-64
SHA-256 checksum
How to use checksums
cf49c6e0137dd108b84c3c462262e95af690af7c214f6bbad76a5e18a20e8d11
BLAKE2b-256 checksum
How to use checksums
a9ce23550736b6e9dfa525778ca7cb2857481d6239da0683928520e399023bb6
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.44.0-cp311-abi3-macosx_13_0_arm64.whl

Download URL sciqlopplots-0.44.0-cp311-abi3-macosx_13_0_arm64.whl
Size 5.8 MB
Tags CPython 3.11 abi3 macOS 13.0+ ARM64
SHA-256 checksum
How to use checksums
4a38ce8dc46e1a28398c4ed59e1c38a4bce3d616d7747a127504c14346f64044
BLAKE2b-256 checksum
How to use checksums
58a0109b14a43ff92cd9602c835773c1145237112c1f76e588a1ad5757ad8fda
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

0.52.0

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

This release

0.44.0 This release

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