Commit 5309483a authored by Luke Campagnola's avatar Luke Campagnola

Merge branch 'release-0.9.8'

parents 03683a5e 08a19f56
__pycache__
build
*.pyc
*.swp
Luke Campagnola <lcampagn@email.unc.edu> Luke Campagnola <>
Luke Campagnola <lcampagn@email.unc.edu> Luke Campagnola <luke.campagnola@gmail.com>
Megan Kratz <meganbkratz@gmail.com> meganbkratz@gmail.com <>
Megan Kratz <meganbkratz@gmail.com> Megan Kratz <megankratz@megancomputer.local>
Megan Kratz <meganbkratz@gmail.com> Megan Kratz <megankratz@wireless152023024102.med.unc.edu>
Megan Kratz <meganbkratz@gmail.com> Megan Kratz <megankratz@wireless152023025209.med.unc.edu>
Megan Kratz <meganbkratz@gmail.com> Megan Kratz <megankratz@p152023031037.med.unc.edu>
Megan Kratz <meganbkratz@gmail.com> Megan Kratz <megankratz@wire152019114033.med.unc.edu>
Megan Kratz <meganbkratz@gmail.com> Megan Kratz <megankratz@wireless152023024078.med.unc.edu>
Ingo Breßler <dev@ingobressler.net> Ingo Breßler <ingo.bressler@bam.de>
Ingo Breßler <dev@ingobressler.net> Ingo B. <dev@ingobressler.net>
pyqtgraph-0.9.8 2013-11-24
API / behavior changes:
- ViewBox will auto-range when ImageItem changes shape
- AxisItem:
- Smarter about deciding which ticks get text
- AxisItem.setScale(float) has the usual behavior, but .setScale(None)
is deprecated. Instead use:
AxisItem.enableAutoSIPrefix(bool) to enable/disable SI prefix scaling
- Removed inf/nan checking from PlotDataItem and PlotCurveItem; improved
performance
New Features:
- Support for dynamic downsampling and view clipping in PlotDataItem and
PlotItem
- Added 'connect' option to PlotDataItem and PlotCurveItem to affect which
line segments are drawn
- Support for FFT with non-uniform time sampling
- Added BarGraphItem
- OpenGL:
- Added export methods to GLViewWidget
- Wireframe meshes
- GLLinePLotItem gets antialiasing, accepts array of colors
- GLMeshItem accepts ShaderProgram or name of predefined program
- Added GLBarGraphItem
- LegendItem:
- User-draggable
- Allow custom ItemSamples
- Symbol support
- Support for removing items
- ScatterPlotWidget, ColorMapWidget, and DataFilterWidget are stable
- TableWidget:
- Made numerically sortable
- Added setEditable method
- AxisItem ability to truncate axis lines at the last tick
- arrayToQPath() added 'finite' connection mode which omits non-finite
values from connections
- pg.plot() and pg.PlotWidget() now accept background argument
- Allow QtProcess without local QApplication
- Support for dashing in mkPen()
- Added Dock.close()
- Added style options to flowchart connection lines
- Added parentChanged and viewChanged hooks to GraphicsItem
- Bidirectional pseudoScatter for beeswarm plots
- Added exit() function for working around PyQt exit crashes
- Added PolylineROI.getArrayRegion()
Bugfixes:
- Many Python 3 compatibility fixes
- AxisItem:
- Correctly handles scaling with values that are not power of 10
- Did not update grid line length when plot stretches
- Fixed unicode handling in AxisItem label
- ViewBox:
- Overhauled to fix issues with aspect locking
- ViewBox context menu elements are no longer deleted when using
flowchart with pyside
- Fixed view linking with inverted y axis
- Prevent auto-range disabling when dragging with one mouse axis diabled
- Ignore inf and nan when auto-ranging
- ParameterTree:
- fixed TextParameter editor disappearing after focus lost
- ListParameter: allow unhashable types as parameter values.
- Exporting:
- ImageExporter correctly handles QBrush with style=NoBrush
- SVGExporter text, gradients working correctly
- SVGExporter correctly handles coordinate corrections for groups with
mixed elements
- ImageView:
- Fixed auto-levelling when normalization options change
- Added autoHistogramRange argument to setImage
- ScatterPlotItem:
- Fixed crashes caused by ScatterPlotItem
- Fixed antialiasing
- arrayToQPath performance improved for python 3
- Fixed makeQImage on many platforms (notably, on newer PyQt APIs)
- Removed unnecessary scipy imports for faster import
- GraphItem reports pixel margins to improve auto-range
- Add backport ordereddict to repository; old OrderedDict class is removed
- Corrected behavior of GraphicsView.setBackground
- Fixed PySide bug listing image formats
- Fixed QString -> str conversions in flowchart
- Unicode file name support when exporting
- Fixed MatplotlibWidget + PySide
- Fixed 3D view updating after every scene change
- Fixed handling of non-native dtypes when optimizing with weave
- RemoteGraphicsView fixed for PyQt 4.10, Python 3
- Fixed GLLinePlotItem line width option
- HistogramLUTWidget obeys default background color
- ScaleBar complete rewrite
- GraphItem obeys antialiasing flag
- Workaround for PySide/QByteArray memory leak
- Fixed example --test on windows, python3
- Luke finished dissertation
pyqtgraph-0.9.7 2013-02-25
Bugfixes:
- ArrowItem auto range now works correctly
- Dock drag/drop fixed on PySide
- Made padding behavior consistent across ViewBox methods
- Fixed MeshData / python2.6 incompatibility
- Fixed ScatterPlotItem.setSize and .setPointData
- Workaround for PySide bug; GradientEditor fixed
- Prefer initially selecting PlotItem rather then ViewBox when exporting
- Fixed python3 import error with flowcharts
Cleaned up examples, made code editable from example loader
Minor documentation updates
Features:
- Added GraphItem class for displaying networks/trees
- Added ColorMap class for mapping linear gradients and generating lookup
tables
(Provides gradient editor functionality without the GUI)
- Added ColorMapWidget for complex user-defined color mapping
- Added ScatterPlotWidget for exploring relationships in multi-column
tables
- Added ErrorBarItem
- SVG and image exporters can now copy to clipboard
- PlotItem gets new methods: addLine, setLabels, and listDataItems
- AxisItem gets setTickFont method
- Added functions.arrayToQPath, shared between GraphItem and PlotCurveItem
- Added gradient editors to parametertree
- Expanded documentation, added beginning of Qt crash course
Bugfixes:
- Fixed auto-ranging bugs: ViewBox now properly handles pixel-padding
around data items
- ViewBox ignores bounds of zoom-rect when auto ranging
- Fixed AxisItem artifacts
- Fixed GraphicsItem.pixelVector caching bugs and simplified workaround for
fp-precision errors
- LinearRegionItem.hoverEvent obeys 'movable' flag
- Fixed PlotDataItem nan masking bugs
- Workaround for segmentation fault in QPainter.drawPixmapFragments
- multiprocess and RemoteGraphicsView work correctly in Windows.
- Expanded python 3 support
- Silenced weave errors by default
- Fixed " 'win' in sys.platform " occurrences matching 'darwin' (duh)
- Workaround for change in QImage API (PyQt 4.9.6)
- Fixed axis ordering bug in GLScatterPlotItem
pyqtgraph-0.9.6 2013-02-14
Features:
- Added GraphItem class for displaying networks/trees
- Added ColorMap class for mapping linear gradients and generating lookup
tables
(Provides gradient editor functionality without the GUI)
- Added ColorMapWidget for complex user-defined color mapping
- Added ScatterPlotWidget for exploring relationships in multi-column
tables
- Added ErrorBarItem
- SVG and image exporters can now copy to clipboard
- PlotItem gets new methods: addLine, setLabels, and listDataItems
- AxisItem gets setTickFont method
- Added functions.arrayToQPath, shared between GraphItem and PlotCurveItem
- Added gradient editors to parametertree
- Expanded documentation, added beginning of Qt crash course
Bugfixes:
- Fixed auto-ranging bugs: ViewBox now properly handles pixel-padding
around data items
- ViewBox ignores bounds of zoom-rect when auto ranging
- Fixed AxisItem artifacts
- Fixed GraphicsItem.pixelVector caching bugs and simplified workaround for
fp-precision errors
- LinearRegionItem.hoverEvent obeys 'movable' flag
- Fixed PlotDataItem nan masking bugs
- Workaround for segmentation fault in QPainter.drawPixmapFragments
- multiprocess and RemoteGraphicsView work correctly in Windows.
- Expanded python 3 support
- Silenced weave errors by default
- Fixed " 'win' in sys.platform " occurrences matching 'darwin' (duh)
- Workaround for change in QImage API (PyQt 4.9.6)
- Fixed axis ordering bug in GLScatterPlotItem
Plotting performance improvements:
- AxisItem shows fewer tick levels in some cases.
- Lots of boundingRect and dataBounds caching
(improves ViewBox auto-range performance, especially with multiple plots)
- GraphicsScene avoids testing for hover intersections with non-hoverable
items
(much less slowdown when moving mouse over plots)
Improved performance for remote plotting:
- reduced cost of transferring arrays between processes (pickle is too
slow)
- avoid unnecessary synchronous calls
Added RemoteSpeedTest example
pyqtgraph-0.9.5 2013-01-11
Plotting performance improvements:
- AxisItem shows fewer tick levels in some cases.
- Lots of boundingRect and dataBounds caching
(improves ViewBox auto-range performance, especially with multiple plots)
- GraphicsScene avoids testing for hover intersections with non-hoverable
items
(much less slowdown when moving mouse over plots)
Improved performance for remote plotting:
- reduced cost of transferring arrays between processes (pickle is too
slow)
- avoid unnecessary synchronous calls
Added RemoteSpeedTest example
Documentation:
- Added documentation on export system
- Added flowchart documentation and custom node example
Bugfixes:
- prevent PlotCurveItem drawing shadow when unnecessary
- deprecated flowchart.Node.__getattr__ -- causes too many problems.
pyqtgraph-0.9.4 2013-01-07
Documentation:
- Added documentation on export system
- Added flowchart documentation and custom node example
Bugfixes:
- prevent PlotCurveItem drawing shadow when unnecessary
- deprecated flowchart.Node.__getattr__ -- causes too many problems.
Bugfix: prevent adding invalid entry to sys.path when running examples
pyqtgraph-0.9.3 2012-12-29
Bugfix: prevent adding invalid entry to sys.path when running examples
Bugfixes:
- SVG export text elements use generic font-family as backup, corrected item
transformation issues
- Fixed RuntimeError caused when clearing item hierarchies from ViewBox
- Fixed example execution bug
Packaging maintenance:
- Added missing files to MANIFEST.in, fixed setup.py package detection
- Added debian control files for building source packages
- Fixed version numbering in doc, __init__.py
pyqtgraph-0.9.2 2012-12-29
Bugfixes:
- SVG export text elements use generic font-family as backup, corrected item
transformation issues
- Fixed RuntimeError caused when clearing item hierarchies from ViewBox
- Fixed example execution bug
Packaging maintenance:
- Added missing files to MANIFEST.in, fixed setup.py package detection
- Added debian control files for building source packages
- Fixed version numbering in doc, __init__.py
pyqtgraph-0.9.1 2012-12-27
Removed incorrect version numbers
Correction to setup.py - use install_requires to inform pip of dependencies.
Fixed doc version (again)
Added debian control files
bugfixes for new package structure
pyqtgraph-0.9.0 2012-12-27
* Initial release.
PyQtGraph
=========
A pure-Python graphics library for PyQt/PySide
Copyright 2012 Luke Campagnola, University of North Carolina at Chapel Hill
<http://www.pyqtgraph.org>
Maintainer
----------
* Luke Campagnola ('luke.campagnola@%s.com' % 'gmail')
Contributors
------------
* Megan Kratz
* Paul Manis
* Ingo Breßler
* Christian Gavin
* Michael Cristopher Hogg
* Ulrich Leutner
* Felix Schill
* Guillaume Poulin
Requirements
------------
* PyQt 4.7+ or PySide
* python 2.6, 2.7, or 3.x
* numpy, scipy
* For 3D graphics: pyopengl
* Known to run on Windows, Linux, and Mac.
Support
-------
Post at the [mailing list / forum](https://groups.google.com/forum/?fromgroups#!forum/pyqtgraph)
Installation Methods
--------------------
* To use with a specific project, simply copy the pyqtgraph subdirectory
anywhere that is importable from your project
* To install system-wide from source distribution:
`$ python setup.py install`
* For instalation packages, see the website (pyqtgraph.org)
Documentation
-------------
There are many examples; run `python -m pyqtgraph.examples` for a menu.
Some (incomplete) documentation exists at this time.
* Easiest place to get documentation is at <http://www.pyqtgraph.org/documentation>
* If you acquired this code as a .tar.gz file from the website, then you can also look in
doc/html.
* If you acquired this code via GitHub, then you can build the documentation using sphinx.
From the documentation directory, run:
`$ make html`
Please feel free to pester Luke or post to the forum if you need a specific
section of documentation.
PyQtGraph - A pure-Python graphics library for PyQt/PySide
Copyright 2012 Luke Campagnola, University of North Carolina at Chapel Hill
http://www.pyqtgraph.org
Authors:
Luke Campagnola ('luke.campagnola@%s.com' % 'gmail')
Megan Kratz
Ingo Breßler
Requirements:
PyQt 4.7+ or PySide
python 2.6, 2.7, or 3.x
numpy, scipy
For 3D graphics: pyopengl
Known to run on Windows, Linux, and Mac.
Support:
Post at the mailing list / forum:
https://groups.google.com/forum/?fromgroups#!forum/pyqtgraph
Installation Methods:
- To use with a specific project, simply copy the pyqtgraph subdirectory
anywhere that is importable from your project
- To install system-wide from source distribution:
$ python setup.py install
- For instalation packages, see the website (pyqtgraph.org)
Documentation:
There are many examples; run "python -m pyqtgraph.examples" for a menu.
Some (incomplete) documentation exists at this time.
- Easiest place to get documentation is at
http://www.pyqtgraph.org/documentation
- If you acquired this code as a .tar.gz file from the website, then you can also look in
doc/html.
- If you acquired this code via BZR, then you can build the documentation using sphinx.
From the documentation directory, run:
$ make html
Please feel free to pester Luke or post to the forum if you need a specific
section of documentation.
"""
Extension for building Qt-like documentation.
- Method lists preceding the actual method documentation
- Inherited members documented separately
- Members inherited from Qt have links to qt-project documentation
- Signal documentation
"""
def setup(app):
# probably we will be making a wrapper around autodoc
app.setup_extension('sphinx.ext.autodoc')
# would it be useful to define a new domain?
#app.add_domain(QtDomain)
## Add new configuration options
app.add_config_value('todo_include_todos', False, False)
## Nodes are the basic objects representing documentation directives
## and roles
app.add_node(Todolist)
app.add_node(Todo,
html=(visit_todo_node, depart_todo_node),
latex=(visit_todo_node, depart_todo_node),
text=(visit_todo_node, depart_todo_node))
## New directives like ".. todo:"
app.add_directive('todo', TodoDirective)
app.add_directive('todolist', TodolistDirective)
## Connect callbacks to specific hooks in the build process
app.connect('doctree-resolved', process_todo_nodes)
app.connect('env-purge-doc', purge_todos)
from docutils import nodes
from sphinx.util.compat import Directive
from sphinx.util.compat import make_admonition
# Just a general node
class Todolist(nodes.General, nodes.Element):
pass
# .. and its directive
class TodolistDirective(Directive):
# all directives have 'run' method that returns a list of nodes
def run(self):
return [Todolist('')]
# Admonition classes are like notes or warnings
class Todo(nodes.Admonition, nodes.Element):
pass
def visit_todo_node(self, node):
self.visit_admonition(node)
def depart_todo_node(self, node):
self.depart_admonition(node)
class TodoDirective(Directive):
# this enables content in the directive
has_content = True
def run(self):
env = self.state.document.settings.env
# create a new target node for linking to
targetid = "todo-%d" % env.new_serialno('todo')
targetnode = nodes.target('', '', ids=[targetid])
# make the admonition node
ad = make_admonition(Todo, self.name, [('Todo')], self.options,
self.content, self.lineno, self.content_offset,
self.block_text, self.state, self.state_machine)
# store a handle in a global list of all todos
if not hasattr(env, 'todo_all_todos'):
env.todo_all_todos = []
env.todo_all_todos.append({
'docname': env.docname,
'lineno': self.lineno,
'todo': ad[0].deepcopy(),
'target': targetnode,
})
# return both the linking target and the node itself
return [targetnode] + ad
# env data is persistent across source files so we purge whenever the source file has changed.
def purge_todos(app, env, docname):
if not hasattr(env, 'todo_all_todos'):
return
env.todo_all_todos = [todo for todo in env.todo_all_todos
if todo['docname'] != docname]
# called at the end of resolving phase; we will convert temporary nodes
# into finalized nodes
def process_todo_nodes(app, doctree, fromdocname):
if not app.config.todo_include_todos:
for node in doctree.traverse(Todo):
node.parent.remove(node)
# Replace all todolist nodes with a list of the collected todos.
# Augment each todo with a backlink to the original location.
env = app.builder.env
for node in doctree.traverse(Todolist):
if not app.config.todo_include_todos:
node.replace_self([])
continue
content = []
for todo_info in env.todo_all_todos:
para = nodes.paragraph()
filename = env.doc2path(todo_info['docname'], base=None)
description = (
('(The original entry is located in %s, line %d and can be found ') %
(filename, todo_info['lineno']))
para += nodes.Text(description, description)
# Create a reference
newnode = nodes.reference('', '')
innernode = nodes.emphasis(('here'), ('here'))
newnode['refdocname'] = todo_info['docname']
newnode['refuri'] = app.builder.get_relative_uri(
fromdocname, todo_info['docname'])
newnode['refuri'] += '#' + todo_info['target']['refid']
newnode.append(innernode)
para += newnode
para += nodes.Text('.)', '.)')
# Insert into the todolist
content.append(todo_info['todo'])
content.append(para)
node.replace_self(content)
GLGraphicsItem
==============
.. autoclass:: pyqtgraph.opengl.GLGraphicsItem
.. autoclass:: pyqtgraph.opengl.GLGraphicsItem.GLGraphicsItem
:members:
.. automethod:: pyqtgraph.GLGraphicsItem.__init__
.. automethod:: pyqtgraph.opengl.GLGraphicsItem.GLGraphicsItem.__init__
GLLinePlotItem
==============
.. autoclass:: pyqtgraph.opengl.GLLinePlotItem
:members:
.. automethod:: pyqtgraph.opengl.GLLinePlotItem.__init__
......@@ -20,6 +20,7 @@ Contents:
glvolumeitem
glimageitem
glmeshitem
gllineplotitem
glaxisitem
glgraphicsitem
glscatterplotitem
......
......@@ -18,6 +18,7 @@ import sys, os
# documentation root, use os.path.abspath to make it absolute, like shown here.
path = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, os.path.join(path, '..', '..'))
sys.path.insert(0, os.path.join(path, '..', 'extensions'))
# -- General configuration -----------------------------------------------------
......@@ -215,3 +216,4 @@ man_pages = [
('index', 'pyqtgraph', 'pyqtgraph Documentation',
['Luke Campagnola'], 1)
]
......@@ -97,6 +97,6 @@ Miscellaneous Functions
.. autofunction:: pyqtgraph.systemInfo
.. autofunction:: pyqtgraph.exit
......@@ -76,15 +76,23 @@ Qt detects and reacts to user interaction by executing its *event loop*.
GraphicsView and GraphicsItems