Skip to main content

QCustomPlot is a Qt widget for plotting and data visualization

Project description

QCustomPlot for PyQt5 and PyQt6

Design goals

This is Python bindings for QCustomPlot - Qt C++ library for plotting and data visualization. This binding can be complied for use with PyQ5 or PyQt6. There are myriads of Python charting libraries out there, and each may even have its reason to exist. QCustomPlot has the following goals:

  • Performance. QCustomPlot is written in modern C++ with the excellent Qt library for superior performance over alternative libraries.

  • Flexibility. QCustomPlot is one of the most customisable libraries available, with a wide range of supported graph types and full control over how the graph is rendered.

Installing

Linux

You can find compiled packages for many Linux distributions at OBS.

Windows

Install the package via our favourite package manager:

$ pip install QCustomPlot_PyQt5

or

$ pip install QCustomPlot_PyQt6

Getting started

Now let's take a look at some code:

import sys
import math
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPen, QBrush, QColor
from PyQt5.QtWidgets import QApplication, QMainWindow
from QCustomPlot_PyQt5 import *


app = QApplication(sys.argv)
window = QMainWindow()
window.resize(800, 600)

customPlot = QCustomPlot()
window.setCentralWidget(customPlot)

graph0 = customPlot.addGraph()
graph0.setPen(QPen(Qt.blue))
graph0.setBrush(QBrush(QColor(0, 0, 255, 20)))

graph1 = customPlot.addGraph()
graph1.setPen(QPen(Qt.red))

x, y0, y1 = [], [], []
for i in range (251):
    x.append(i)
    y0.append(math.exp(-i/150.0)*math.cos(i/10.0))  # exponentially decaying cosine
    y1.append(math.exp(-i/150.0))                   # exponential envelope

graph0.setData(x, y0)
graph1.setData(x, y1)

customPlot.rescaleAxes()
customPlot.setInteraction(QCP.iRangeDrag)
customPlot.setInteraction(QCP.iRangeZoom)
customPlot.setInteraction(QCP.iSelectPlottables)

window.show()
sys.exit(app.exec_())

That's all!

Some important things:

  • QCustomPlot is a QWidget type that can be used the same way as any other widget, added to layouts, etc. However, you can nest multiple graphs in a single QCustomPlot using layouts (see the Advanced Axes demo).

Examples

Beside the examples below, you may want to check the documentation.

Supported compilers

The following compilers are known to work:

  • MSVC 140, 141
  • GCC 4.8
  • Clang 3.4

I would be happy to learn about other compilers/versions.

License

This code is licensed under the MIT License:

Copyright © 2017-2023 Dmitry Voronin, Christopher Gilbert and Sergey Salnikov

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


Part of the code is licensed under the GPL Version 3 License.


This project contains the QCustomPlot library from Emanuel Eichhammer which is licensed under the GPL Version 3 License. Copyright © 2011-2022 Emanuel Eichhammer bjoern@hoehrmann.de

Contact

If you have questions regarding the library, I would like to invite you to open an issue at Github. Please describe your request, problem, or question as detailed as possible, and also mention the version of the library you are using as well as the version of your compiler and operating system. Opening an issue at GitHub allows other users and contributors to this library to collaborate.

Thanks

I deeply appreciate the help of the following people.

  • DerManu is the official author and maintainer of the excellent QCustomPlot library.
  • dimv36 is the original author of the Python bindings for QCustomPlot 1.0.0, upon which this project is based.
  • cowo78 and cjgdev added support for the QCustomPlot 2.0.0 API.

Thanks a lot for helping out! Please let me know if I forgot someone.

Used third-party tools

This library is built, tested, documented, and whatnot using third-party tools and services. Thanks a lot!

  • SIP to generate the Python bindings.

Projects using

  • GPX Viewer --- an application for viewing GPX files as a list of points and tracks.

If you are using QCustomPlot-PyQt5 in a project and would like to share with the community, please let me know, or even better, raise a pull request.

Building from sources

Linux

Apt users (Debian, Ubuntu, etc) may follow the instructions below, users of other distributions may adapt the steps below for your own package manager. Qt5 or Qt6 can be used as a dependency.

# Fetch the necessary development tools and libraries
$ apt-get install build-essential python3-pyqt5 pyqt5-dev-tools qttools5-dev-tools

# Clone the repository and submodules
$ git clone --recursive https://github.com/salsergey/QCustomPlot-PyQt.git && cd QCustomPlot-PyQt

# Build
$ sip-build --qmake _path_to_qmake5_or_qmake6_

# Zzz..

# Install
$ sip-install --qmake _path_to_qmake5_or_qmake6_

Windows

Windows users should install Qt tools, appropriate version of VC compiler, Python, PyQt5 and SIP. You may need to build SIP from sources to ensure you have all files necessary for building other software. Then follow the instructions below to build the library, otherwise you will need to adapt the steps for your own environment.

  • Download QCustomPlot-PyQt sources from Github. You can use git or download an archive.
  • Launch Qt console and follow instructions there. It will ensure that you have all necessary tools in your PATH variable. Also be sure that python.exe binary is in your PATH.
  • Then follow these instructions:
# Go to QCustomPlot folder
cd <<PATH_TO QCustomPlot-PyQt>>

# Download submodules if you use git
git submodules update --init

# Build
sip-build --qmake _path_to_qmake5_or_qmake6_

# Zzz..

# Install
sip-install --qmake _path_to_qmake5_or_qmake6_

macOS

Users of macOS using homebrew may follow the instructions below to fetch the required packages to build the library, or simply adapt to your own environment.

# First ensure Xcode is installed, as homebrew depends on it
$ xcode-select --install

# Fetch the necessary development tools and libraries
$ brew install pyqt@5

# Clone the repository and submodules
$ git clone --recursive https://github.com/salsergey/QCustomPlot-PyQt.git && cd QCustomPlot-PyQt

# Build
$ CFLAGS='-std=c++11 -stdlib=libc++' CXXFLAGS='-std=c++11 -stdlib=libc++' sip-build --qmake _path_to_qmake5_or_qmake6_

# Zzz..

# Install
$ sip-install --qmake _path_to_qmake5_or_qmake6_

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

QCustomPlot_PyQt6-2.1.1.2.tar.gz (487.9 kB view details)

Uploaded Source

Built Distributions

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

qcustomplot_pyqt6-2.1.1.2-cp314-none-win_amd64.whl (852.8 kB view details)

Uploaded CPython 3.14Windows x86-64

qcustomplot_pyqt6-2.1.1.2-cp314-cp314-manylinux_2_28_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

qcustomplot_pyqt6-2.1.1.2-cp313-none-win_amd64.whl (2.6 MB view details)

Uploaded CPython 3.13Windows x86-64

qcustomplot_pyqt6-2.1.1.2-cp313-cp313-manylinux_2_28_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

QCustomPlot_PyQt6-2.1.1.2-cp312-none-win_amd64.whl (823.9 kB view details)

Uploaded CPython 3.12Windows x86-64

QCustomPlot_PyQt6-2.1.1.2-cp312-cp312-manylinux_2_28_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

QCustomPlot_PyQt6-2.1.1.2-cp311-none-win_amd64.whl (823.4 kB view details)

Uploaded CPython 3.11Windows x86-64

QCustomPlot_PyQt6-2.1.1.2-cp311-cp311-manylinux_2_28_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

QCustomPlot_PyQt6-2.1.1.2-cp310-none-win_amd64.whl (823.3 kB view details)

Uploaded CPython 3.10Windows x86-64

QCustomPlot_PyQt6-2.1.1.2-cp310-cp310-manylinux_2_28_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

File details

Details for the file QCustomPlot_PyQt6-2.1.1.2.tar.gz.

File metadata

  • Download URL: QCustomPlot_PyQt6-2.1.1.2.tar.gz
  • Upload date:
  • Size: 487.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for QCustomPlot_PyQt6-2.1.1.2.tar.gz
Algorithm Hash digest
SHA256 655b72d3ba573bff08ee4bebdb91ec1fe2589f7b2f00ca88dca7fda32d90e06d
MD5 e23df480098d6ad51fbd4590b79b4931
BLAKE2b-256 66fe3608cf235dd60cf1ccdd892786f4bb0aeb3073348ad75f04eaa36b2add6d

See more details on using hashes here.

File details

Details for the file qcustomplot_pyqt6-2.1.1.2-cp314-none-win_amd64.whl.

File metadata

File hashes

Hashes for qcustomplot_pyqt6-2.1.1.2-cp314-none-win_amd64.whl
Algorithm Hash digest
SHA256 dfdc8a61819fcf57d15106913ba46694e7e688f269eb30fce6ae072cef95360c
MD5 e5f31da7fb0b238b8d1e0e02bbd429fe
BLAKE2b-256 ac00c3b2512a22a648dcf2398cdbccb1b88d678309606bc85cb90fcddd5dc4fe

See more details on using hashes here.

File details

Details for the file qcustomplot_pyqt6-2.1.1.2-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for qcustomplot_pyqt6-2.1.1.2-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c20724766fab354f406c651b39628fd2b9a2569fc5034b62a2339a2ad3ab7026
MD5 46a3af4c8524df6fb914d0fdff6af30f
BLAKE2b-256 54028ccc169464b40df38ec73f9606c8bee92a70b90f8f81c64a98640abdadf0

See more details on using hashes here.

File details

Details for the file qcustomplot_pyqt6-2.1.1.2-cp313-none-win_amd64.whl.

File metadata

File hashes

Hashes for qcustomplot_pyqt6-2.1.1.2-cp313-none-win_amd64.whl
Algorithm Hash digest
SHA256 32af2f4e428b76fa6fed1142abcae9e76cbc402faa2a119911590b34d229f0c6
MD5 ebf2d324639ec0b2b703ac7fb08ef8b4
BLAKE2b-256 194266ea2eae39b235189e8f80846205c9fa6df0db8e7546a014124dde81241b

See more details on using hashes here.

File details

Details for the file qcustomplot_pyqt6-2.1.1.2-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for qcustomplot_pyqt6-2.1.1.2-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 900eb99745412edf59b5a5cca05c7ec87371087db1aee46d7807cf530f9d63ae
MD5 291a7fc5aeecd7438f905c1fea9b6f12
BLAKE2b-256 47f5a9413d5ee3ea367ba11aa28b7e0ce2fff0cbb4d910d78afb6343bb961310

See more details on using hashes here.

File details

Details for the file QCustomPlot_PyQt6-2.1.1.2-cp312-none-win_amd64.whl.

File metadata

File hashes

Hashes for QCustomPlot_PyQt6-2.1.1.2-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 1677f69d8a787a5fa77f5e495639c76104a3729f4c1639a8f442e89cecb95e4f
MD5 e0caad4a0b98c7f77ecd1655d3aa697f
BLAKE2b-256 e8c3396fe90d981550d7ee52902e413fc53f5cfcf53793b0bdf7b5f3763a7440

See more details on using hashes here.

File details

Details for the file QCustomPlot_PyQt6-2.1.1.2-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for QCustomPlot_PyQt6-2.1.1.2-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c761e3a05a9b9ab06d85ad266096428a2026f091615923c2fbdb86ba5f6fe754
MD5 e5efe1821a05bdc8b27cc4bc6d2f3a9d
BLAKE2b-256 c4d83aac17a6f53180b194f4c9c75b6064f05c7116ecdac6a201e0f68b769e31

See more details on using hashes here.

File details

Details for the file QCustomPlot_PyQt6-2.1.1.2-cp311-none-win_amd64.whl.

File metadata

File hashes

Hashes for QCustomPlot_PyQt6-2.1.1.2-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 c27e1a356074660b0c05305a32dca42d6f31accf0b14dca2b426d1cb76f97c1b
MD5 b596f445ae39c23d751105ef0f5c4c56
BLAKE2b-256 3c4f23ee2f7ff92205d8fc7e4cc4f651f6bb0f32c90683495e522fd5ebc2b4a1

See more details on using hashes here.

File details

Details for the file QCustomPlot_PyQt6-2.1.1.2-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for QCustomPlot_PyQt6-2.1.1.2-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 97131ff4ae0895f0996eac76181531f514ad311c9eb97e500fbc7e3b9224cbed
MD5 9379a2ff0d99afa195f4c6bc178dcc00
BLAKE2b-256 8cec4af92628facac58293a3a030109a993f058bc20c23d44a30e51848db0979

See more details on using hashes here.

File details

Details for the file QCustomPlot_PyQt6-2.1.1.2-cp310-none-win_amd64.whl.

File metadata

File hashes

Hashes for QCustomPlot_PyQt6-2.1.1.2-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 07f1c4b8f354530c88c64f3502bce465bd1a49426246f3a38f2c235a14bcc6e9
MD5 1b159be59f09ea3e4542d5bb0d44ac70
BLAKE2b-256 98b9993a6d5437abfeb6eefa8f3576bec8874334ed752710f8ecb251d398e646

See more details on using hashes here.

File details

Details for the file QCustomPlot_PyQt6-2.1.1.2-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for QCustomPlot_PyQt6-2.1.1.2-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0fc50fc777b4e7761f068bcc7f98968050312a48165a3fd5c35d3b9c049ddccc
MD5 aa63f77fdfb575adf8ab8288a5a53965
BLAKE2b-256 a76c7d3e3152b92e4dee10cb8137cd815964b287e73987c0c50634f18585fea3

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