eudoxos
eudoxos

Reputation: 19065

using interactive and non-interactive backends within one program

I am running code written with PyQt4 which uses matplotlib's Qt4Agg backend for showing live plots in windows. At the same time, I would like to use matplotlib in background thread to produce (different) figures which are only saved to file, not shown on the screen.

I can use Qt4Agg in the background thread, but I am getting a bunch of

QPixmap: It is not safe to use pixmaps outside the GUI thread

warnings, and also crashes in some cases.

As far as I see, matplotlib currently supports using only one backend at any given time (which can be changed via switch_backend, but that closes all existing figures). Is there some way to work around this limitation, and to assign per-figure backend?

Upvotes: 5

Views: 1907

Answers (1)

pelson
pelson

Reputation: 21829

To my knowledge, only if you don't use the pyplot interface.

For instance, using the full OO interface for a simple plot:

from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure

fig = Figure()
canvas = FigureCanvas(fig)
ax = fig.add_subplot(1,1,1)
ax.plot([1,2,3])
canvas.print_figure('test.png')

HTH

Upvotes: 9

Related Questions