La mia configurazione:
Debian Linux 8.3 amd64, XMonad WM, python2.7, matplotlib 1.5.1Come impostare tight_layout per i grafici matplotlib dopo lo show()
Problema:
Sono facendo una trama, ad esempio:
import matplotlib.pyplot as plt
x = xrange(10)
y1 = [i ** 2 for i in x]
y2 = [1.0/(i + 1) for i in x]
fig = plt.figure()
ax1 = plt.subplot(1, 2, 1)
ax1.plot(x, y1)
ax2 = plt.subplot(1, 2, 2)
ax2.plot(x, y2)
plt.show()
e dato che sto usando la finestra piastrelle manager, la finestra del matplotlib ottiene allungato per una piastrella. Purtroppo questo rende i grafici piccoli e il layout un po 'allentato.
Se si desidera "stringere" un bit, fare clic su "Configura sottopagine-> Tight Layout" fa il lavoro. Ma questo significa che devo cliccare sull'icona e poi sul pulsante ogni volta e dato che io uso questa trama per visualizzare i dati di test ed eseguirlo molto spesso, è abbastanza fastidioso. Così ho provato un paio di cose per rendere questo più facile:
Che cosa ho provato:
chiamando
plt.tight_layout()
primashow()
:... ax2.plot(x, y2) plt.tight_layout() plt.show()
aggiungendo gestore pressione di un tasto (così mi sarebbe sufficiente premere "t"):
... ax2.plot(x, y2) def kbd_handler(event): if event.key == 't': plt.tight_layout() plt.gcf().canvas.mpl_connect('key_press_event', kbd_handler) plt.show()
chiamando
tight_layout
sulla figura:ax2.plot(x, y2) fig.tight_layout() plt.show()
Tutto cambiato nulla o almeno sembrava lo stesso per 2 sottotrame in una riga, tuttavia per più di una riga, si fece il layout ancora più sciolto e tutte le sottotrame estremamente piccole.
Quello che sospetto:
Credo che il problema è legato al ridimensionamento che probabilmente accade dopo la creazione della finestra , in modo che le opere con tighten_layout
finestra originale dimensioni. Quando il Window Manager ridimensiona la finestra, il layout mantiene le dimensioni sottotrama e ho un layout "loose" con grafici in miniatura ..
La domanda
C'è un modo per automaticamente (o molto facilmente - come utilizzando un key_press_event) stringere il layout anche quando la finestra viene ridimensionata immediatamente dopo chiamando plt.show()
?
Mi piacerebbe saperlo. – user1350191
@ user1350191 La risposta di Thomas sotto ha funzionato per me ... –