-
Notifications
You must be signed in to change notification settings - Fork 8
Home
Some imports are very commonly needed. Importing these names in a consistent manor helps keep notebook code readable:
import numpy as np
import menpo.io as mio
import scipy.io as sio # for reading/dumping .mat files
import matplotlib.pyplot as plt
Currently, Menpo uses matplotlib for 2D visualization and Mayavi or 3D visualization. Care is taken to seperate visualization commands into the menpo.visualize
package, to allow for the possibility of supporting new visualization tools in the future. You can see the defaults being set here.
In example notebooks, try to avoid calling specific viewing packages to do novel visualizations (this might be a sign that you should consider adding a new viewer to the visualize package). You can assume that images are best viewed inline and 3D visualizations best run under qt
though.
IPython can hook into various GUI event loops in order to allow for asycnronous execution of GUI code seperate from the notebook kernel (this makes it possible to adjust the view of a 3D model in Mayavi while running other code in the notebook for instance). Only one event loop intergration can be active at one time. The following event loops are of interest to us:
-
inline
allows for inline viewing of matplotlib plots in the notebook. -
qt
required for Mayavi to function. Note we useqt
instead ofwx
due to its superior OS X support.
Integration can be done at the startup time of IPython using the --gui
or --pylab
commands. Dont do this! Commonly in one notebook we will need to switch between 2D and 3D backends. The above method would require a kernel restart to switch which is a terrible user experience. Thankfully, we can use the %matplotlib
cell magic to change event loop integegration on a cell by cell level.
%matplotlib inline
image.view() # by default show example images inline
...
Note that due to an open bug in IPython with qt
the magic has to be run in an isolated cell before 3D viewing code is required:
%matplotlib qt # note that we have to run this in isolation!
mesh.view() # by default view meshes using qt in Mayavi
...
Notebooks should be structured so that the user can run the code without having to manually change event loop integration - i.e. sprinkle the %matplotlib
fairly liberally if needed! Note that if a notebook operates exclusively with one datatype (e.g. just images) it's fairly safe to just set the back end once at the top of the file.