Figure Manager

The Manager class is the primary component of texfigure, it makes it easier to generate and work with figures generated in PythonTeX code blocks from within a LaTeX document.

A figure manager does a number of things:

1. Tracks data files in a given directory. 1. Adds python files in a given directory to the Python Path. 1. Saves figures from any know figure type. 1. Tracks figures allowing them to be recalled later. 1. Returns MultiFigure objects containing any number of already tracked Figures.

The purpose of a Manager object is to deal with the paths to your data, code and figures so that you don’t have to. It also abstracts away the saving of the figures for you so that you can pass any known figure object to the Manager and it will save it in the correct directory and return you a texfigure.Figure object.

Using a Figure Manager

There are a few ways to use a Manager instance, you can either use it as a quick way to save figures and generate Figure objects. Or you can use it as a store for all the figures generated using the Manager, saving the figures using the Manager and then latter recalling them using their reference and including them in your document.

You can generate a Figure object using the texfigure.Manager.save_figure function:

\begin{pycode}
manager = texfigure.Manager(pytex, './')
\end{pycode}

This is my document, spam eggs, eggs and spam.

\begin{pycode}
fig, ax = plt.subplots()
ax.plot([0,1], [0,1], 'o')

Fig = manager.save_figure(fig, "plot1")
\end{pycode}

\py|Fig|

Alternatively, you can use the get_figure method to request the Figure object at a later date. This method is normally more useful in more complex situations than the example below:

\begin{pycode}
manager = texfigure.Manager(pytex, './')
\end{pycode}

This is my document, spam eggs, eggs and spam.

\begin{pycode}
fig, ax = plt.subplots()
ax.plot([0,1], [0,1], 'o')

manager.save_figure(fig, "plot1")
\end{pycode}

\py|manager.get_figure("plot1")|

Figure Types

Manager can save three different types of figure objects.

1. matplotlib.figure.Figure. 1. yt.visualization.plot_container.ImagePlotContainer. 1. mayavi.core.scene.Scene.

This means you can pass any of these three objects (or their subclasses) to texfigure.Manager.save_figure and it will save them to the provided figure_dir and generate a Figure object to add to the registry.

You can register save functions with the Manager to save custom plot types, the function given to the manager has to have the following signature:

def myfigure_handler(fig, filename, **kwargs):
    fig.save(filename)
    return filename

You can then register the function with the Manager:

mymanager = texfigure.Manager(pytex, './')
mymanager.savefigure_functions[MyFigureClass] = myfigure_handler

If you have another plotting library that you would like texfigure to support, you can add support for your figure type into texfigure and submit a PR.