2013-03-16 20 views
7

Se utilizzo il backend Agg, non riesco a mantenere le finestre delle immagini aperte con show() (indipendentemente dallo block=True o meno) --- si chiudono virtualmente immediatamente. Se io non uso Agg, allora ottengo l'avvertimento: codice dipython matplotlib Agg rispetto al plottaggio interattivo e tight_layout

/Library/Python/2.7/site-packages/matplotlib-1.2.0-py2.7-macosx-10.8-intel.egg/matplotlib/tight_layout.py:225: UserWarning: tight_layout : falling back to Agg renderer warnings.warn("tight_layout : falling back to Agg renderer")

Esempio:

import matplotlib as mpl 
mpl.use('Agg')  # With this line = figure disappears; without this line = warning 
import matplotlib.pyplot as plt 
import matplotlib.mlab as mlab 
import numpy as np 

fig = plt.figure() 
ax = fig.add_subplot(111) 
mu, sigma = 0, 0.5 
x = np.linspace(-3, 3, 100) 
plt.plot(x, mlab.normpdf(x, mu, sigma)) 
fig.tight_layout() 
plt.show() 

Esiste un back-end o di metodologia diversa dovrei usare?

+0

Qual è il tuo back-end predefinito? Se esegui "import matplotlib come mpl' e poi" mpl.get_backend() ", cosa ottieni? Questo sarà il back-end che usa quando non si specifica "Agg", e si potrebbe essere in grado di ottenere ciò che si desidera passando a un back-end diverso da uno di questi due. – BrenBarn

+0

@zhermes: hai finalmente trovato un lavoro. Sono di fronte allo stesso problema. – nia

+2

La soluzione non soddisfacente è rimuovere 'mpl.use ('Agg')', e usare 'fig.set_tight_layout (True)' invece di 'fig.tight_layout()' come suggerito da @FelipeCorreia – DilithiumMatrix

risposta

7

La soluzione, in @FilipeCorreia in a comment, è di rimuovere mpl.use('Agg') e utilizzare fig.set_tight_layout(True) anziché fig.tight_layout().

+0

O se si utilizza l'interfaccia non orientata agli oggetti, 'plt.gcf(). Set_tight_layout (True)' invece di 'plt.tight_layout()'. –

+0

@ 1 '' Non dico 'plt.tight_layout()', io uso 'fig.tight_layout()' ... che è * l'oggetto * restituito da 'plt.gcf()'. – DilithiumMatrix

+1

Ovviamente, è sufficiente includere questo commento per le persone che hanno solo familiarità con la sintassi 'plt.function()'. –

6

Agg è un non-interactive backend, il che significa che non verrà visualizzato sullo schermo, ma solo nei file. Quale back-end stai usando? Hai OSX, forse puoi provare il 'macosx', o un backend interattivo che usa Agg (ad esempio QT4Agg, WXAgg).

+0

Grazie Tiago, ho provato entrambi di quelli e sto ancora ricevendo lo stesso messaggio di avviso. Quello che non capisco è, se si tratta di 'ricadere in AGG', allora perché il disegno interattivo funziona ancora? – DilithiumMatrix

+8

Se si sceglie la modalità interattiva, si può provare 'fig.set_tight_layout (True)' invece di 'fig.tight_layout()'. Vedi i commenti su [questo problema] (https://github.com/matplotlib/matplotlib/issues/1852) su github. –

+0

@FilipeCorreia Il tuo suggerimento funziona anche quando si utilizza un backend non interattivo diverso da Agg, come il pdf. Potresti postarlo come risposta? –

Problemi correlati