Use PyQtGraph Canvas¶
PyQtGraph is a data visualization library based on Qt. It provides variety of plot
canvases and plot items that can be operated in a interactive way. The
magicclass.ext.pyqtgraph
submodule tries to integrate many of the pyqtgraph
widgets to provide a consistent, magicgui
-like API.
You have to install pyqtgraph
in advance.
pip install pyqtgraph
Then several pyqtgraph
canvases are now available.
from magicclass.ext.pyqtgraph import QtPlotCanvas # 1-D plot, like plt.plot
from magicclass.ext.pyqtgraph import QtMultiPlotCanvas # multiple QtPlotCanvas
from magicclass.ext.pyqtgraph import QtImageCanvas # 2-D image, like plt.imshow
from magicclass.ext.pyqtgraph import QtMultiImageCanvas # multiple QtImageCanvas
QtPlotCanvas¶
QtPlotCanvas
is a canvas for 1-D plotting.
from magicclass.ext.pyqtgraph import QtPlotCanvas
canvas = QtPlotCanvas()
canvas.show()
A QtPlotCanvas
is composed of several "layers" and each layer corresponds to a plot item
that is in the canvas. Basically you'll add new layers to visualize data.
Methods and Attributes¶
Major methods
add_curve()
... Add a curve possibly with symbols, similar toplt.plot
.add_scatter()
... Add scatter plot item, similar toplt.scatter
.add_hist()
... Build a histogram from input data, similar toplt.hist
.add_bar()
... Add a bar plot, similar toplt.bar
.add_infline()
... Add a infinite line, similar toplt.axline
.add_text()
... Add list of texts, similar toplt.text
.show()
... Show canvas.
Major attributes and properties
layers
... List of all the layers.visible
... Visibility of canvas.enabled
... Interactivity of canvas.xlim
... Minumum and maximum value of x-axis in viewbox.ylim
... Minumum and maximum value of y-axis in viewbox.xlabel
... Label text of x-axis.ylabel
... Label text of y-axis.title
... Title text of the plot canvas.legend
... Legend item of the canvas.mouse_click_callbacks
... list of callback functions that will get called on mouse click.
Add curves¶
add_curve
method will add a Curve
layer to the canvas, store the layer in the layers
attribute and return the layer.
xdata = np.linspace(0, np.pi, 200)
ydata = np.sin(xdata) * np.exp(-xdata)
layer = canvas.add_curve(xdata, ydata) # or canvas.add_curve(ydata) if you don't need x scale.
There are other keyword argument that will be useful to visualize differently.
canvas.add_curve(xdata, ydata, name="Data-1") # name of the layer
canvas.add_curve(xdata, ydata, edge_color="yellow") # change color
canvas.add_curve(xdata, ydata, lw=4, ls="--") # change line width and line style
canvas.add_curve(xdata, ydata, symbol="+") # show symbol at the data points
Layer is available in layers
.
layer = canvas.layers[0] # the first layer
Handle layers¶
The layer objects are also designed to be easily
Show/hide layer
layer.visible = True # show layer.visible = False # hide
Change color
layer.face_color = "red" # str layer.face_color = [0.4, 0.2, 0.2, 1.0] # float RGBA layer.edge_color = [0.4, 0.2, 0.2, 1.0] # change edge color layer.color = "white" # change face color and edge color
Get data
layer.xdata # the x data layer.ydata # the y data
QtMultiPlotCanvas¶
QtMultiPlotCanvas
is a collection of QtPlotCanvas
.
from magicclass.ext.pyqtgraph import QtMultiPlotCanvas
canvas = QtMultiPlotCanvas(1, 2) # 1 x 2 canvases
canvas.show()
If you want to synchronize axes movements, set sharex
and sharey
.
canvas = QtMultiPlotCanvas(2, 2, sharex=True, sharey=True)
The i-th canvas is available by simple indexing. Returned items have the same API as
QtPlotCanvas
.
canvas[0].add_curve(np.random.random(100)) # add curve to the 0-th canvas.
canvas[1].layers # Layer list of the 1st canvas.