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
  • 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
  • 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.47.1

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.47.1
File Size Uploaded
sciqlopplots-0.47.1.tar.gz 1.9 MB Details

Built distributions (wheels)

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

Total release size: 38.0 MB

Release files / sciqlopplots-0.47.1.tar.gz

Download URL sciqlopplots-0.47.1.tar.gz
Size 1.9 MB
Tags Source
SHA-256 checksum
How to use checksums
c6ee5bbcf972ffdcc4b18cd56812a9b7001dd0daad5254de01fdb5f0068776a8
BLAKE2b-256 checksum
How to use checksums
f972d2c307ad6ce4901ecc91d4b6211c571bb7b6fa9ac0e05252a0b0bd20a2e3
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.47.1-cp311-abi3-win_arm64.whl

Download URL sciqlopplots-0.47.1-cp311-abi3-win_arm64.whl
Size 4.8 MB
Tags CPython 3.11 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
ee34c0d0d012d0db12bb9ed187a563924358877e3d6a4eea1ec800354c7ed845
BLAKE2b-256 checksum
How to use checksums
6cac880aeff06c9c533dab2485d0957c5cb8eaeea72de84208e37a3feefa2204
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.47.1-cp311-abi3-win_amd64.whl

Download URL sciqlopplots-0.47.1-cp311-abi3-win_amd64.whl
Size 4.7 MB
Tags CPython 3.11 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
5fa275f5eb46cb578ac9928fec404f63df994e1b9347f8ea4af1ccab28c86859
BLAKE2b-256 checksum
How to use checksums
f32a23029ca0895c1db488da4d1c7f1376bfb57ed45318c86e007cb6e964d4a8
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.47.1-cp311-abi3-manylinux_2_39_aarch64.whl

Download URL sciqlopplots-0.47.1-cp311-abi3-manylinux_2_39_aarch64.whl
Size 7.0 MB
Tags CPython 3.11 Linux glibc 2.39+ ARM64 abi3
SHA-256 checksum
How to use checksums
6fde5a84a02dfb9c1d4634b4254dba7a93a437703d4f7340ea36b95219bff055
BLAKE2b-256 checksum
How to use checksums
9b1bff5cf63bd0f98b8a45436045c5b3261a96721a2ee17d314ab38e980eb67b
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.47.1-cp311-abi3-manylinux_2_34_x86_64.whl

Download URL sciqlopplots-0.47.1-cp311-abi3-manylinux_2_34_x86_64.whl
Size 7.5 MB
Tags CPython 3.11 Linux glibc 2.34+ x86-64 abi3
SHA-256 checksum
How to use checksums
231d5213019f42f93ba3a459c54d9a300eac6181d98e31a9fd6c487a5c000d25
BLAKE2b-256 checksum
How to use checksums
06e99c0c2bbb6fb634bf6c57761fe544f66c94a3256da6f31d8b2a1df3197078
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.47.1-cp311-abi3-macosx_13_0_x86_64.whl

Download URL sciqlopplots-0.47.1-cp311-abi3-macosx_13_0_x86_64.whl
Size 6.4 MB
Tags CPython 3.11 abi3 macOS 13.0+ x86-64
SHA-256 checksum
How to use checksums
f620de45b6f0ceaa98ea3eb4c04f83e5e57794943285fc4a9d1db86def176ae2
BLAKE2b-256 checksum
How to use checksums
50007f22f9acf5e4fb01b7d972fd00f3b68582c8b5ef285dbf6bab1e636f4022
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.47.1-cp311-abi3-macosx_13_0_arm64.whl

Download URL sciqlopplots-0.47.1-cp311-abi3-macosx_13_0_arm64.whl
Size 5.9 MB
Tags CPython 3.11 abi3 macOS 13.0+ ARM64
SHA-256 checksum
How to use checksums
036a8f3aee711b680a7567cb821986333de25c3061428189e6f6fecef4439c4f
BLAKE2b-256 checksum
How to use checksums
ef477f5c97c6a00aae601d5825fd33ffb2446121a6ba25e79a1d9ed6c5b6a0a3
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.47.1 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