Go to file
lidstrom83 3af23725ca
Scatter Plot Improvements (#1420)
* Added hovering demo to ScatterPlot example

* Use Qt's serialization for SymbolAtlas.symbolMap keys

Yields significant performance improvements when updating the scatter plot's options. See e.g. the plot hover example.

* Further optimized scatter plot picking

* Fix ScatterPlot example tool tip

* Clean up while I'm here

* Compatibility

* Some simple optimizations for ScatterPlotItem

Speedups for ScatterPlotSpeedTest.py:
~50% without pxMode
~ 0% pxMode with useCache
~30% pxMode without useCache

* ~3x speedup in scatter plot speed test with pxMode

* More optimization low-hanging fruit for the scatter plot

* Removed hover example to lazily pass tests

* Avoid segfault

* Re-add hover example to ScatterPlot.py

* Switch to id-based keying for scatter plot symbol atlas

- Use cases exist where serialization-based keying is a significant bottleneck, e.g. updating without atlas invalidation when a large variety pens or brushes are present.
- To avoid a performance hit, the onus is on the user to carefully reuse pen and brush objects.

* Optimized caching in scatter plot hovering example

* Fixed and optimized scatter plot hovering example

* Minor scatter plot optimization

* Cleanup

* Store hovered points in a set for the hovering example

* Keep a limited number symbol atlas entries around for future reuse

* Added a docstring note to remind the user to reuse QPen and QBrush objects for better performance

* Tidied up hovering example

* Typo

* Avoid unnecessary atlas rebuilds

* Refactored SymbolAtlas

* Efficient appending to SymbolAtlas

* SymbolAtlas rewrite

* Cleanup and profiling

* Add randomized brushes to speed test

* Add loc indexer to ScatterPlotItem

* Profile ScatterPlotItem.paint to identify bottlenecks

* Reuse targetRect to improve paint performance

* Readability improvements (opinionated)

* Only need to set x and y of targetRect

- w and h can stay set to 0 (not entirely sure why)
- this is a bit faster than setting all of x, y, w, h

* Minor renaming

* Strip off API changes and leave to another PR

* Renaming

* Compatibility

* Use drawPixmap(x, y, pm, sx, sy, sw, sh) signature to avoid needing to update QRectFs

* Use different drawing approaches for each Qt binding for performance reasons

* Fix a bug introduced two commits ago

Incidentally, I think there is a similar bug in the main branch currently.

* Minor performance and readability improvements

* Strip out source and target QRectF stuff

* Bring source and target QRectF stuff back in a less coupled way

* Leave deprecating getSpotOpts for another PR

* Compatibility fix

* Added docstrings and use SymbolAtlas__len__ where possible

* Fix export issue

* Add missing import

* Add deprecation warnings

* Avoid using deprecated methods

* Fix and cleanup max spot size measurements

* Make creation of style opts entries explicit

* Add hovering API to ScatterPlotItem

* Compatibility

* Marshal pen and brush lists in setPen and setBrush

* Fixed platform dependent bug
2020-12-16 11:07:39 -08:00
.github/ISSUE_TEMPLATE Add issue template (#976) 2019-07-02 10:26:51 -04:00
doc example app now works with Qt4 and Python2 again (#1302) 2020-10-19 11:51:12 -07:00
examples Scatter Plot Improvements (#1420) 2020-12-16 11:07:39 -08:00
pyqtgraph Scatter Plot Improvements (#1420) 2020-12-16 11:07:39 -08:00
tools handle case of version string having no '+' (#1402) 2020-10-17 22:22:29 -07:00
.coveragerc MNT: hard code the coverage report location 2015-08-01 11:54:15 -04:00
.flake8 Expand CI + pre-commit (#991) 2019-08-29 13:56:25 -07:00
.gitignore TST: Attempt 1 at breaking out ViewBox tests 2015-07-31 11:08:14 -04:00
.pre-commit-config.yaml Expand CI + pre-commit (#991) 2019-08-29 13:56:25 -07:00
.readthedocs.yml Add readthedocs config file as recommended 2020-05-17 16:06:00 -07:00
azure-pipelines.yml Add a docs build job to CI (#1328) 2020-10-15 08:43:23 -07:00
azure-test-template.yml Use conda-forge on pyside2+linux (#1464) 2020-12-09 22:43:21 -08:00
CHANGELOG Final preparations for 0.11.0 release 2020-06-08 18:25:45 -05:00
CONTRIBUTING.md Remove a few remaining mentions of the develop branch 2020-09-30 21:04:09 -07:00
LICENSE.txt - Major reorganization; we now follow the standard python package structure. 2012-12-26 17:51:52 -05:00
MANIFEST.in manifest corrections 2014-12-24 11:05:05 -05:00
pytest.ini Filter out expected warnings 2020-02-28 14:28:36 -08:00
README.md Fix Azure Pipelines badge in README 2020-08-15 13:18:08 -07:00
setup.py remote legacy work-around for old numpy errors (#1046) 2019-09-26 10:08:43 -07:00
test.py We support pyside2 don't we? 2019-05-30 14:40:39 -07:00
tox.ini Remove py2 pip warning message 2020-02-28 14:29:16 -08:00

Build Status Documentation Status

PyQtGraph

A pure-Python graphics library for PyQt/PySide/PyQt5/PySide2

Copyright 2020 Luke Campagnola, University of North Carolina at Chapel Hill

http://www.pyqtgraph.org

PyQtGraph is intended for use in mathematics / scientific / engineering applications. Despite being written entirely in python, the library is fast due to its heavy leverage of numpy for number crunching, Qt's GraphicsView framework for 2D display, and OpenGL for 3D display.

Requirements

  • Python 2.7, or 3.x
  • Required
    • PyQt 4.8+, PySide, PyQt5, or PySide2
    • numpy
  • Optional
    • scipy for image processing
    • pyopengl for 3D graphics
    • hdf5 for large hdf5 binary format support

Qt Bindings Test Matrix

The following table represents the python environments we test in our CI system. Our CI system uses Ubuntu 18.04, Windows Server 2019, and macOS 10.15 base images.

Qt-Bindings Python 2.7 Python 3.6 Python 3.7 Python 3.8
PyQt-4
PySide1
PyQt5-5.9
PySide2-5.13
PyQt5-Latest
PySide2-Latest
  • pyqtgraph has had some incompatibilities with PySide2 versions 5.6-5.11, and we recommend you avoid those versions if possible
  • on macOS with Python 2.7 and Qt4 bindings (PyQt4 or PySide) the openGL related visualizations do not work reliably

Support

Installation Methods

  • From PyPI:
    • Last released version: pip install pyqtgraph
    • Latest development version: pip install git+https://github.com/pyqtgraph/pyqtgraph@master
  • From conda
    • Last released version: conda install -c conda-forge pyqtgraph
  • To install system-wide from source distribution: python setup.py install
  • Many linux package repositories have release versions.
  • To use with a specific project, simply copy the pyqtgraph subdirectory anywhere that is importable from your project.

Documentation

The official documentation lives at https://pyqtgraph.readthedocs.io

The easiest way to learn pyqtgraph is to browse through the examples; run python -m pyqtgraph.examples to launch the examples application.