2013-08-13 31 views
5

Mam kod napisany przy pomocy PyQt4, który używa backendu matplotlib o nazwie Qt4Agg do wyświetlania żywych wykresów w oknach. Jednocześnie chciałbym użyć matplotlib w wątku tła do tworzenia (różnych) figur, które są zapisywane do pliku, a nie pokazywane na ekranie.za pomocą interaktywnych i nieinteraktywnych backendów w ramach jednego programu

mogę używać Qt4Agg w wątku tła, ale ja dostaję kilka

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

ostrzeżeń i awarii również w niektórych przypadkach.

O ile widzę, matplotlib obecnie obsługuje tylko jeden backend w danym momencie (który można zmienić za pomocą switch_backend, ale to zamyka wszystkie istniejące dane). Czy istnieje sposób obejścia tego ograniczenia i przypisywania post-figure'u?

Odpowiedz

6

Według mojej wiedzy, tylko jeśli nie używasz interfejsu Pyplot.

Na przykład, przy użyciu pełnej interfejs OO prostego działki:

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

+0

Każdy sposób, aby dać Ci więcej niż tylko jeden +1 dla tej odpowiedzi? Zrobiłeś mój dzień, naprawdę. – eudoxos

+1

:-) Dzięki za to. +1 jest jednak wystarczający. + Jeśli kiedykolwiek spotkamy się na konferencji w Pythonie, nie odrzucę piwa. – pelson