Come massimizzare una finestra plt.show () usando Python


95

Tanto per curiosità vorrei sapere come farlo nel codice sottostante. Ho cercato una risposta ma è inutile.

import numpy as np
import matplotlib.pyplot as plt
data=np.random.exponential(scale=180, size=10000)
print ('el valor medio de la distribucion exponencial es: ')
print np.average(data)
plt.hist(data,bins=len(data)**0.5,normed=True, cumulative=True, facecolor='red', label='datos tamano paqutes acumulativa', alpha=0.5)
plt.legend()
plt.xlabel('algo')
plt.ylabel('algo')
plt.grid()
plt.show()

4
Spoiler, lavorando su Windows: plt.get_current_fig_manager().window.state('zoomed')allora plt.show().
Basj

1
non funziona per me
Johan

Risposte:


37

Di solito uso

mng = plt.get_current_fig_manager()
mng.frame.Maximize(True)

prima della chiamata a plt.show(), e ottengo una finestra ingrandita. Funziona solo per il backend "wx".

MODIFICARE:

per il backend Qt4Agg, vedi la risposta di kwerenda .


66
Usando questo, ottengo mng.frame.Maximize(True) AttributeError: FigureManagerTkAgg instance has no attribute 'frame'in Matplotlib 1.2.0
Junuxx

2
Funziona con backend wx, ho aggiornato il post di conseguenza. È probabile che il backend Tk che stai utilizzando non supporti questa funzione. Hai la possibilità di cambiare il backend di matplotlib in "wx"?
gg349

11
errore su mac: mng.frame.Maximize (True) AttributeError: l'oggetto 'FigureManagerMac' non ha attributo 'frame'
user391339

7
Esiste una soluzione nota per eseguire questa operazione sul MacOSXbackend? La FigureManagerMacsembra avere né l'attributo windowframe.
McLawrence

3
Ho lo stesso problema su Windows
RollRoll

169

Sono su un Windows (WIN7), con Python 2.7.5 e Matplotlib 1.3.1.

Sono stato in grado di massimizzare le finestre delle figure per TkAgg, QT4Agg e wxAgg usando le seguenti linee:

from matplotlib import pyplot as plt

### for 'TkAgg' backend
plt.figure(1)
plt.switch_backend('TkAgg') #TkAgg (instead Qt4Agg)
print '#1 Backend:',plt.get_backend()
plt.plot([1,2,6,4])
mng = plt.get_current_fig_manager()
### works on Ubuntu??? >> did NOT working on windows
# mng.resize(*mng.window.maxsize())
mng.window.state('zoomed') #works fine on Windows!
plt.show() #close the figure to run the next section

### for 'wxAgg' backend
plt.figure(2)
plt.switch_backend('wxAgg')
print '#2 Backend:',plt.get_backend()
plt.plot([1,2,6,4])
mng = plt.get_current_fig_manager()
mng.frame.Maximize(True)
plt.show() #close the figure to run the next section

### for 'Qt4Agg' backend
plt.figure(3)
plt.switch_backend('QT4Agg') #default on my system
print '#3 Backend:',plt.get_backend()
plt.plot([1,2,6,4])
figManager = plt.get_current_fig_manager()
figManager.window.showMaximized()
plt.show()

Spero che questo riepilogo delle risposte precedenti (e alcune aggiunte) combinate in un esempio funzionante (almeno per Windows) aiuti. Saluti


7
### funziona su Ubuntu ??? >> NON funzionava su windows mng.resize (* mng.window.maxsize ()) #funziona perfettamente su Linux per me
Daniele

1
@Daniele, la tua soluzione funziona per me su TkAgg su Ubuntu. Grazie! Ma mi ci è voluto un po 'per analizzare;) Forse sbarazzarsi di tutto prima di "mng.resize ...".
BenB

1
C'è un modo semplice per controllare quale backend stai usando? un po 'usato l'errore di fine prova ora.
Rutger Hofste

1
Sfortunatamente, ho provato il tuo codice con Qt5Agg, quando digito figManager.window.showMaximized(), la finestra a schermo intero ingrandita è appena comparsa. La riga successiva: plt.show()mostra semplicemente un'altra finestra che traccia i dati in una finestra di dimensioni normali.
StayFoolish

3
La soluzione basata su Tk non funziona per me: _tkinter.TclError: bad argument "zoomed": must be normal, iconic, or withdrawn(Ubuntu 16.04).
bluenote10

77

Con il backend Qt (FigureManagerQT) il comando corretto è:

figManager = plt.get_current_fig_manager()
figManager.window.showMaximized()

1
Ciò richiede ancora in plt.show()seguito. Ottima risposta però, funziona su Windows!
lucidbrot

L'oggetto "_tkinter.tkapp" ha l'attributo bi "showMaximized". Sempre più convinto che Python sia uno scherzo più che un linguaggio
HAL9000

1
@ HAL9000 Innanzitutto, questo è per Qt4, non per Tk. In secondo luogo, stai incolpando una lingua per quello che è un problema di progettazione di pacchetti esterni. Puoi avere questo tipo di problema in qualsiasi lingua.
Jeff Learman

Ottengo AttributeError: '_tkinter.tkapp' object has no attribute 'showMaximized'su Windows.
Basj

45

Questo fa sì che la finestra occupi l'intero schermo per me, sotto Ubuntu 12.04 con il backend TkAgg:

    mng = plt.get_current_fig_manager()
    mng.resize(*mng.window.maxsize())

6
Nota che questo ha effetti strani su una configurazione di più monitor. La finestra utilizzerà tutti i monitor, invece di essere ingrandita.
user1202136

2
Questo non creerà una finestra ingrandita (che dovrebbe agganciarsi ai bordi dello schermo), ma creerà una finestra non ingrandita con le dimensioni di una ingrandita.
Ciao Arrivederci

Questo massimizza con successo anche la finestra in Ubuntu 14.04, mantenendo la barra in alto con i pulsanti che tutti conosciamo.
Irene

Funziona su Ubuntu 16.04 e linux mint. python2.7 testato
user1941407

@ user1202136 Ha funzionato bene per me in una configurazione a 3 monitor.
Michael Litvin,

40

Per me niente di quanto sopra ha funzionato. Uso il backend Tk su Ubuntu 14.04 che contiene matplotlib 1.3.1.

Il codice seguente crea una finestra di trama a schermo intero che non è la stessa della massimizzazione ma serve bene al mio scopo:

from matplotlib import pyplot as plt
mng = plt.get_current_fig_manager()
mng.full_screen_toggle()
plt.show()

1
Questa è stata anche la soluzione che ha funzionato per me (anche se va a schermo intero, finestra non ingrandita). In esecuzione su Redhat Enterprise Linux 6, python 2.7.10, matplotlib 1.4.3.
CrossEntropy

1
Ha funzionato per me all'interno di Visual Studio 2015 su Windows 10 x64, python 3.5 tranne per il fatto che non ho potuto accedere al bordo della finestra per chiudere la figura, poiché era sopra i pixel dello schermo superiore.
David Cuccia

1
Per me, questo non crea nemmeno una finestra ingrandita, ma una a schermo intero. Non ho ottenuto alcun pulsante di riduzione a icona, ingrandimento / ripristino e chiusura come le normali finestre e ho dovuto fare clic con il pulsante destro del mouse sulla finestra sulla barra delle applicazioni per chiuderla.
Ciao Arrivederci

1
Questo va a schermo intero senza mostrare i pulsanti di ogni finestra. Provato su Ubuntu 14.04.
Irene

1
Funzionando come un fascino su Raspbian (jessie)
anatol

37

Questo dovrebbe funzionare ( almeno con TkAgg):

wm = plt.get_current_fig_manager()
wm.window.state('zoomed')

(adottato da quanto sopra e utilizzando Tkinter, c'è un modo per ottenere la dimensione dello schermo utilizzabile senza ingrandire visibilmente una finestra? )


1
Sìì! Questo ha funzionato per me; crea una finestra ingrandita che si aggancia ai bordi dello schermo e ha i pulsanti di riduzione a icona, ingrandimento / ripristino e chiusura come dovrebbero.
Ciao Arrivederci

1
Tuttavia, vuoi dire che funziona con TkAgg, no TkApp, giusto?
Ciao Arrivederci

Buona cattura (probabilmente un errore di battitura)! TkAgg è un backend per Tk.
Dinvlad

3
Ho appena provato questo per matplotlib 2 / python 3. Funziona sotto le finestre!
not_a_bot_no_really_82353

7

Questo è un po 'hacky e probabilmente non portatile, usalo solo se stai cercando veloce e sporco. Se imposto solo la figura molto più grande dello schermo, occupa esattamente l'intero schermo.

fig = figure(figsize=(80, 60))

Infatti, in Ubuntu 16.04 con Qt4Agg, massimizza la finestra (non a schermo intero) se è più grande dello schermo. (Se hai due monitor, lo massimizza solo su uno di essi).


Per me va bene! Mentre sto cercando di ottenere le dimensioni dello schermo.
StayFoolish

7

L'ho trovato per la modalità a schermo intero su Ubuntu

#Show full screen
mng = plt.get_current_fig_manager()
mng.full_screen_toggle()

6

Lo capisco anche io mng.frame.Maximize(True) AttributeError: FigureManagerTkAgg instance has no attribute 'frame'.

Quindi ho esaminato gli attributi mnge ho trovato questo:

mng.window.showMaximized()

Ha funzionato per me.

Quindi, per le persone che hanno gli stessi problemi, puoi provare questo.

A proposito, la mia versione di Matplotlib è 1.3.1.


Grazie! Questa soluzione ha funzionato bene per me. In esecuzione su Redhat Enterprise Linux 6, python 2.7.10, matplotlib 1.4.3.
CrossEntropy

So che verrà visualizzata una finestra a schermo intero, ma i miei grafici verranno visualizzati in una finestra separata quando digito plt.show(). Non su questa finestra a schermo intero, qualche suggerimento?
StayFoolish

Funziona anche su python 3.6 su Debian e con il backend Qt.
pbalaga

questo non funziona su Windows 10 64 bit con Python 3.7
George Sp

4

L'unica soluzione che ha funzionato perfettamente su Win 10.

import matplotlib.pyplot as plt

plt.plot(x_data, y_data)

mng = plt.get_current_fig_manager()
mng.window.state("zoomed")
plt.show()

4

Il mio miglior sforzo finora, supportando diversi backend:

from platform import system
def plt_maximize():
    # See discussion: /programming/12439588/how-to-maximize-a-plt-show-window-using-python
    backend = plt.get_backend()
    cfm = plt.get_current_fig_manager()
    if backend == "wxAgg":
        cfm.frame.Maximize(True)
    elif backend == "TkAgg":
        if system() == "win32":
            cfm.window.state('zoomed')  # This is windows only
        else:
            cfm.resize(*cfm.window.maxsize())
    elif backend == 'QT4Agg':
        cfm.window.showMaximized()
    elif callable(getattr(cfm, "full_screen_toggle", None)):
        if not getattr(cfm, "flag_is_max", None):
            cfm.full_screen_toggle()
            cfm.flag_is_max = True
    else:
        raise RuntimeError("plt_maximize() is not implemented for current backend:", backend)

3

Premendo il ftasto (octrl+f in 1.2rc1) quando ci si concentra su un grafico, la finestra del grafico verrà visualizzata a schermo intero. Non del tutto massimizzante, ma forse migliore.

Oltre a questo, per massimizzare effettivamente, dovrai utilizzare i comandi specifici di GUI Toolkit (se esistono per il tuo backend specifico).

HTH


Questo spiega quale tasto ho continuato a premere accidentalmente che ha visualizzato a schermo intero le mie finestre! (E come annullarlo.)
cxrodgers

2

Nelle mie versioni (Python 3.6, Eclipse, Windows 7), gli snippet forniti sopra non funzionavano, ma con i suggerimenti forniti da Eclipse / pydev (dopo aver digitato: mng.), Ho trovato:

mng.full_screen_toggle()

Sembra che l'uso di mng-commands sia ok solo per lo sviluppo locale ...


2

Prova a utilizzare il metodo "Figure.set_size_inches", con l'argomento parola chiave aggiuntivo forward=True. Secondo la documentazione , questo dovrebbe ridimensionare la finestra della figura.

Se ciò accadrà effettivamente dipenderà dal sistema operativo che stai utilizzando.


2

Ecco una funzione basata sulla risposta di @ Pythonio. Lo incapsulano in una funzione che rileva automaticamente quale backend sta utilizzando e fa le azioni corrispondenti.

def plt_set_fullscreen():
    backend = str(plt.get_backend())
    mgr = plt.get_current_fig_manager()
    if backend == 'TkAgg':
        if os.name == 'nt':
            mgr.window.state('zoomed')
        else:
            mgr.resize(*mgr.window.maxsize())
    elif backend == 'wxAgg':
        mgr.frame.Maximize(True)
    elif backend == 'Qt4Agg':
        mgr.window.showMaximized()

1

Prova plt.figure(figsize=(6*3.13,4*3.13))a ingrandire la trama.


1

Ok, quindi questo è ciò che ha funzionato per me. Ho scelto l'intera opzione showMaximize () e ridimensiona la finestra in proporzione alle dimensioni della figura, ma non si espande e "si adatta" alla tela. Ho risolto questo problema:

mng = plt.get_current_fig_manager()                                         
mng.window.showMaximized()
plt.tight_layout()    
plt.savefig('Images/SAVES_PIC_AS_PDF.pdf') 

plt.show()

0

Questo non massimizza necessariamente la tua finestra, ma ridimensiona la tua finestra in proporzione alla dimensione della figura:

from matplotlib import pyplot as plt
F = gcf()
Size = F.get_size_inches()
F.set_size_inches(Size[0]*2, Size[1]*2, forward=True)#Set forward to True to resize window along with plot in figure.
plt.show() #or plt.imshow(z_array) if using an animation, where z_array is a matrix or numpy array

Questo potrebbe anche aiutare: http://matplotlib.1069221.n5.nabble.com/Resizing-figure-windows-td11424.html


0

Quanto segue potrebbe funzionare con tutti i backend, ma l'ho testato solo su QT:

import numpy as np
import matplotlib.pyplot as plt
import time

plt.switch_backend('QT4Agg') #default on my system
print('Backend: {}'.format(plt.get_backend()))

fig = plt.figure()
ax = fig.add_axes([0,0, 1,1])
ax.axis([0,10, 0,10])
ax.plot(5, 5, 'ro')

mng = plt._pylab_helpers.Gcf.figs.get(fig.number, None)

mng.window.showMaximized() #maximize the figure
time.sleep(3)
mng.window.showMinimized() #minimize the figure
time.sleep(3)
mng.window.showNormal() #normal figure
time.sleep(3)
mng.window.hide() #hide the figure
time.sleep(3)
fig.show() #show the previously hidden figure

ax.plot(6,6, 'bo') #just to check that everything is ok
plt.show()

0
import matplotlib.pyplot as plt
def maximize():
    plot_backend = plt.get_backend()
    mng = plt.get_current_fig_manager()
    if plot_backend == 'TkAgg':
        mng.resize(*mng.window.maxsize())
    elif plot_backend == 'wxAgg':
        mng.frame.Maximize(True)
    elif plot_backend == 'Qt4Agg':
        mng.window.showMaximized()

Quindi chiama la funzione maximize()primaplt.show()


Non funziona con 2 monitor. Cambia semplicemente il sito della finestra alle dimensioni dello schermo (non alle dimensioni del monitor) e inoltre non lo mette nel pixel in alto a sinistra dello schermo. @ ch271828n la soluzione ha funzionato bene
Alex

0

Per il backend GTK3Agg , usa maximize()- in particolare con una m minuscola :

manager = plt.get_current_fig_manager()
manager.window.maximize()

Testato in Ubuntu 20.04 con Python 3.8.


0

Per il backend basato su Tk (TkAgg), queste due opzioni massimizzano la finestra a schermo intero:

plt.get_current_fig_manager().window.state('zoomed')
plt.get_current_fig_manager().window.attributes('-fullscreen', True)

Quando si stampa in più finestre, è necessario scrivere questo per ogni finestra:

data = rasterio.open(filepath)

blue, green, red, nir = data.read()
plt.figure(1)
plt.subplot(121); plt.imshow(blue);
plt.subplot(122); plt.imshow(red);
plt.get_current_fig_manager().window.state('zoomed')

rgb = np.dstack((red, green, blue))
nrg = np.dstack((nir, red, green))
plt.figure(2)
plt.subplot(121); plt.imshow(rgb);
plt.subplot(122); plt.imshow(nrg);
plt.get_current_fig_manager().window.state('zoomed')

plt.show()

Qui, entrambe le "figure" sono tracciate in finestre separate. Utilizzando una variabile come

figure_manager = plt.get_current_fig_manager()

potrebbe non massimizzare la seconda finestra, poiché la variabile si riferisce ancora alla prima finestra.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.