Skip to main content

A QtQuick backend for matplotlib

Project description

matplotlib_backend_qtquick

This package implements a QtQuick backend for matplotlib. It started from maplotlib_qtquick_playground, written by Frédéric Collonval, but it has been updated to work with the current version (3.2.1) of matplotlib.

Usage

In order to use matplotlib plots with QtQuick, do the following:

  1. In your main.py, use QtQml.qmlRegisterType to register FigureCanvasQtQuickAgg under whichever name you want to use.
  2. In your QML files, instantiate an object with the QML type defined above. Its objectName property specifies the name of the object that can be found in the QML engine. It can be retrieved in python with win.findChild(QtCore.QObject, "spectFigure"), for example, where "spectFigure" is the objectName in this case.
  3. One can then pass this object as needed. This is the FigureCanvasQtQuickAgg object. The figure can be found in its figure property.

For interactive plots, if you want to use the toolbar, to the Bridge class add slots like:

    @QtCore.Slot()
    def zoom(self, *args):
        """activate zoom tool."""
        self.toolbar.zoom(*args)

One can also connect to Matplotlib events:

       self._figure.canvas.mpl_connect('button_press_event', self.onClick)
       self._figure.canvas.mpl_connect('scroll_event', self.onScroll)

and provide the callbacks, for example:

    def onClick(self, event):
        """
        Handle mouse clicks in the three slices:
        set the slice to what is clicked.
        """
        if event.button == MouseButton.LEFT:
            if event.inaxes == self.axeses[0]:
                self.x = self._findBin(self.xAxis, event.xdata)
                self.y = self._findBin(self.yAxis, event.ydata)
                self.setSlice()
            elif event.inaxes == self.axeses[1]:
                self.x = self._findBin(self.xAxis, event.xdata)
                self.z = self._findBin(self.zAxis, event.ydata)
                self.setSlice()
            elif event.inaxes == self.axeses[2]:
                self.y = self._findBin(self.yAxis, event.xdata)
                self.z = self._findBin(self.zAxis, event.ydata)
                self.setSlice()

    def onScroll(self, event):
        """
        Handle mouse scroll in the three slices
        - scroll the independent variable
        """
        if event.inaxes == self.axeses[0]:
            self.z += int(event.step)
            self.setSlice()
        elif event.inaxes == self.axeses[1]:
            self.y += int(event.step)
            self.setSlice()
        elif event.inaxes == self.axeses[2]:
            self.x += int(event.step)
            self.setSlice()

Please let me know if you have any suggestions or better ways I should do this.

Examples

The example in the examples directory gives a simple example of how to use this backend, including interactions.

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

matplotlib_backend_qtquick-0.0.8.tar.gz (14.0 kB view details)

Uploaded Source

Built Distribution

matplotlib_backend_qtquick-0.0.8-py3-none-any.whl (15.8 kB view details)

Uploaded Python 3

File details

Details for the file matplotlib_backend_qtquick-0.0.8.tar.gz.

File metadata

  • Download URL: matplotlib_backend_qtquick-0.0.8.tar.gz
  • Upload date:
  • Size: 14.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for matplotlib_backend_qtquick-0.0.8.tar.gz
Algorithm Hash digest
SHA256 40373f7e06fd7773a4df44da40cd14a0e7f3e59291446348c8788144f1c80436
MD5 80ec1e9e59632e23a445e204aaa67aaa
BLAKE2b-256 2cb5f0a3d793485abdba4ee57a99efc187eb8f4fece07811c67ada2913bdb87e

See more details on using hashes here.

File details

Details for the file matplotlib_backend_qtquick-0.0.8-py3-none-any.whl.

File metadata

  • Download URL: matplotlib_backend_qtquick-0.0.8-py3-none-any.whl
  • Upload date:
  • Size: 15.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for matplotlib_backend_qtquick-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 3a3a6d682e2d15d24b9a93ab6b273fba26d7441f699c6f6bd6213f157768b9e9
MD5 4a4fe6c1a2d59408a602f2a97bbb95dd
BLAKE2b-256 2e976cb758d90bd1c34a85002684f2da5c51e527b5646b7b8fd577e7d4e31ebb

See more details on using hashes here.

Supported by

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