- Basic 2D plotting in interactive view boxes
- Line and scatter plots
- Data can be panned/scaled by mouse
- Fast drawing for realtime data display and interaction
- Image display with interactive lookup tables and level control
- Displays most data types (int or float; any bit depth; RGB, RGBA, or luminance)
- Functions for slicing multidimensional images at arbitrary angles (great for MRI data)
- Rapid update for video display or realtime interaction
- 3D graphics system (requires Python-OpenGL bindings)
- Volumetric data rendering
- 3D surface and scatter plots
- Mesh rendering with isosurface generation
- Interactive viewports rotate/zoom with mouse
- Basic 3D scenegraph for easier programming
- Data selection/marking and region-of-interest controls
- Interactively mark vertical/horizontal locations and regions in plots
- Widgets for selecting arbitrary regions from images and automatically slicing data to match
- Easy to generate new graphics
- 2D graphics use Qt's GraphicsView framework which is highly capable and mature.
- 3D graphics use OpenGL
- All graphics use a scenegraph for managing items; new graphics items are simple to create.
- Library of widgets and modules useful for science/engineering applications
- Flowchart widget for interactive prototyping.
Interface similar to LabView (nodes connected by wires).
- Parameter tree widget for displaying/editing hierarchies of parameters
(similar to those used by most GUI design applications).
- Interactive python console with exception catching.
Great for debugging/introspection as well as advanced user interaction.
- Multi-process control allowing remote plotting, Qt signal connection across processes, and very simple in-line parallelization.
- Dock system allowing the user to rearrange GUI components.
Similar to Qt's dock system but a little more flexible and programmable.
- Color gradient editor
- SpinBox with SI-unit display and logarithmic stepping
- Debian, Ubuntu, and similar Linux:
Download the .deb file linked at the top of the page.
- Other Linux:
Many people have generated packages for non-debian Linux distributions, including Arch, Suse, and Gentoo. Check your distribution repository for pyqtgraph packages.
Download and run the .exe installer file linked at the top of the page.
- Everybody (including OSX):
Download the .tar.gz source package linked at the top of the page, extract its contents, and run "python setup.py install" from within the extracted directory (pyqtgraph is a pure-python library, so no compiling occurs during this installation). Or, install from pypi using "pip install pyqtgraph".
It should, however, run on any platform which supports the following packages:
- Python 2.7 and 3+
- PyQt 4.8+ or PySide
- python-opengl bindings are required for 3D graphics
If you would like to request a specific section of documentation, please ask on the forum. There are also many examples to look through; for a menu of examples run:
python -m pyqtgraph.examples
Packaging for Distribution:
For versions past 0.9.8, using py2exe is much simpler; see examples/py2exe.
Questions, feedback, and bug reports:
- Post questions, feedback, and bug reports to the pyqtgraph forum.
- Or: post questions to Stack Overflow with the tag 'pyqtgraph' (if it's not tagged correctly, I'll probably never see it).
Comparison to other python graphics packages:
- Matplotlib is more or less the de-facto standard plotting library for python. If
you are starting a new project and do not need any of the features specifically provided
by pyqtgraph, you should start with matplotlib. It is much more mature, has an enormous
user community, and produces very nice publication-quality graphics.
Reasons you might want to use pyqtgraph instead:
- Speed. If you are doing anything requiring rapid plot updates, video, or realtime interactivity, matplotlib is not the best choice. This is (in my opinion) matplotlib's greatest weakness.
- Portability / ease of installation. PyQtGraph is a pure-python package, which means that it runs on virtually every platform supported by numpy and PyQt, no compiling required. If you require portability in your application, this can make your life a lot easier.
- Many other features--pyqtgraph is much more than a plotting library; it strives to cover many aspects of science/engineering application development with more advanced features like its ImageView and ScatterPlotWidget analysis tools, ROI-based data slicing, parameter trees, flowcharts, multiprocessing, and more.
- VisPy is a new 2D/3D visualization library based on OpenGL that is developed as a collaboration
between the authors of PyQtGraph, VisVis, Galry, and Glumpy. It is presently in early development
and has a narrower scope than PyQtGraph--it will focus on visualization without the GUI toolkit
features provided by PyQtGraph. In the long term, we hope VisPy will be able to replace
Qt as the rendering engine for 2D graphics, and replace the pyqtgraph.opengl 3D system entirely.
More about VisPy here.
- PyQwt has a very nice set of features and is fast enough for realtime work. Its main drawback is that it is currently unmaintained and can be difficult to get working on a variety of platforms. Hopefully in the future it may find a new maintainer, but until then it may be best to avoid PyQwt (the original PyQwt maintainer is currently recommending to use pyqtgraph instead; check their mailing lists for updates). Like matplotlib, PyQwt lacks some of the more advanced features of pyqtgraph.
- Chaco is a very interesting project--nice graphics, good speed, and actively developed. Like PyQwt, however, Chaco can be challenging to install on a wide variety of platforms and lacks some of pyqtgraph's more advanced features (although pyqtgraph certainly lacks many of Chaco's features as well).
- GuiQwt is an interesting project with many advanced features similar to pyqtgraph. It is presently based on PyQwt and thus comes with some of its drawbacks, although there appear to be plans to change this in the future.