So maximieren Sie ein plt.show () -Fenster mit Python


90

Nur aus Neugier möchte ich im folgenden Code wissen, wie das geht. Ich habe nach einer Antwort gesucht, bin aber nutzlos.

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()

3
Spoiler, arbeitet unter Windows: plt.get_current_fig_manager().window.state('zoomed')dann plt.show().
Basj

Antworten:


34

Ich benutze normalerweise

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

vor dem Anruf an plt.show() , und ich bekomme ein maximiertes Fenster. Dies funktioniert nur für das Backend 'wx'.

BEARBEITEN:

Informationen zum Qt4Agg-Backend finden Sie in der Antwort von kwerenda .


58
Damit komme ich mng.frame.Maximize(True) AttributeError: FigureManagerTkAgg instance has no attribute 'frame'in Matplotlib 1.2.0
Junuxx

2
Es funktioniert mit Backend wx, ich habe den Beitrag entsprechend aktualisiert. Wahrscheinlich unterstützt das von Ihnen verwendete Tk-Backend diese Funktion nicht. Haben Sie die Möglichkeit, das matplotlib-Backend in 'wx' zu ändern?
gg349

10
Fehler auf dem Mac: mng.frame.Maximize (True) AttributeError: Das Objekt 'FigureManagerMac' hat kein Attribut 'frame'
user391339

6
Gibt es eine bekannte Lösung, um dies im MacOSXBackend zu tun ? Das FigureManagerMacscheint weder das Attribut windownoch zu haben frame.
McLawrence

2
Ich habe das gleiche Problem unter Windows
RollRoll

167

Ich arbeite unter Windows (WIN7) mit Python 2.7.5 und Matplotlib 1.3.1.

Ich konnte die Figurenfenster für TkAgg, QT4Agg und wxAgg mithilfe der folgenden Zeilen maximieren:

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()

Ich hoffe, diese Zusammenfassung der vorherigen Antworten (und einiger Ergänzungen) in einem Arbeitsbeispiel (zumindest für Windows) hilft. Prost


7
### funktioniert unter Ubuntu ??? >> hat NICHT unter Windows gearbeitet mng.resize (* mng.window.maxsize ()) # funktioniert perfekt unter Linux für mich
Daniele

1
@ Daniele, deine Lösung funktioniert für mich unter TkAgg unter Ubuntu. Vielen Dank! Aber ich habe eine Weile gebraucht, um zu analysieren;) Vielleicht alles vor "mng.resize ..." loswerden.
BenB

1
Gibt es eine einfache Möglichkeit zu überprüfen, welches Backend Sie verwenden? irgendwie verwendet Test Versuch Fehler jetzt.
Rutger Hofste

1
Leider habe ich Ihren Code mit Qt5Agg ausprobiert. Beim figManager.window.showMaximized()Eingeben wurde gerade das maximierte Vollbildfenster angezeigt. Die nächste Zeile: plt.show()Zeigen Sie einfach ein anderes Fenster, in dem die Daten in einem Fenster normaler Größe dargestellt werden.
StayFoolish

3
Die Tk-basierte Lösung funktioniert bei mir nicht: _tkinter.TclError: bad argument "zoomed": must be normal, iconic, or withdrawn(Ubuntu 16.04).
bluenote10

76

Mit dem Qt-Backend (FigureManagerQT) lautet der richtige Befehl:

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

1
Dies erfordert noch plt.show()danach. Tolle Antwort, funktioniert unter Windows!
Lucidbrot

Das Objekt '_tkinter.tkapp' hat das Bi-Attribut 'showMaximized'. Immer mehr davon überzeugt, dass Python mehr ein Witz als eine Sprache ist
HAL9000

1
@ HAL9000 Erstens ist dies für Qt4, nicht für Tk. Zweitens machen Sie eine Sprache für ein externes Problem beim Verpackungsdesign verantwortlich. Sie können diese Art von Problem in jeder Sprache haben.
Jeff Learman

43

Dadurch nimmt das Fenster unter Ubuntu 12.04 mit dem TkAgg-Backend für mich den Vollbildmodus ein:

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

6
Beachten Sie, dass dies seltsame Auswirkungen auf die Einrichtung mehrerer Monitore hat. Das Fenster verbraucht alle Monitore, anstatt maximiert zu werden.
user1202136

2
Dadurch wird kein maximiertes Fenster erstellt (das an den Bildschirmrändern einrasten sollte), sondern ein nicht maximiertes Fenster mit der Größe eines maximierten Fensters.
HelloGoodbye

Dadurch wird das Fenster auch in Ubuntu 14.04 erfolgreich maximiert, wobei die obere Leiste mit den uns allen bekannten Schaltflächen erhalten bleibt.
Irene

Funktioniert unter Ubuntu 16.04 und Linux Mint. python2.7 getestet
user1941407

@ user1202136 Hat in einem 3-Monitor-Setup gut funktioniert.
Michael Litvin

41

Für mich hat nichts davon funktioniert. Ich benutze das Tk-Backend unter Ubuntu 14.04, das matplotlib 1.3.1 enthält.

Der folgende Code erstellt ein Vollbild-Plotfenster, das nicht mit Maximieren identisch ist, aber meinen Zweck erfüllt:

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

1
Dies war auch die Lösung, die für mich funktioniert hat (obwohl es sich um Vollbild handelt, nicht um maximiertes Fenster). Laufen unter Redhat Enterprise Linux 6, Python 2.7.10, Matplotlib 1.4.3.
CrossEntropy

1
Arbeitete für mich in Visual Studio 2015 unter Windows 10 x64, Python 3.5, außer dass ich nicht auf den Fensterrand zugreifen konnte, um die Abbildung zu schließen, da er sich über den Pixeln des oberen Bildschirms befand.
David Cuccia

1
Für mich wird dadurch auch kein maximiertes Fenster erstellt, sondern ein Vollbildfenster. Ich habe keine Minimierungs-, Maximierungs- / Wiederherstellungs- und Schließschaltflächen wie bei normalen Fenstern erhalten und musste mit der rechten Maustaste auf das Fenster in der Taskleiste klicken, um es schließen zu können.
HelloGoodbye

1
Dies erfolgt im Vollbildmodus, ohne dass die Schaltflächen angezeigt werden, über die jedes Fenster verfügt. Versucht unter Ubuntu 14.04.
Irene

1
Arbeiten wie ein Zauber auf Raspbian (Jessie)
Anatol

35

Dies sollte funktionieren ( zumindest mit TkAgg):

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

( Wie oben beschrieben und unter Verwendung von Tkinter, gibt es eine Möglichkeit, die verwendbare Bildschirmgröße zu erhalten, ohne ein Fenster sichtbar zu zoomen? )


1
Yay! Das hat bei mir funktioniert; Es wird ein maximiertes Fenster erstellt, das an den Rändern des Bildschirms einrastet und über die Schaltflächen zum Minimieren, Maximieren / Wiederherstellen nach unten und Schließen verfügt.
HelloGoodbye

1
Aber meinen Sie , dass dies funktioniert mit TkAgg, nicht TkApp, nicht wahr?
HelloGoodbye

Guter Fang (wahrscheinlich ein Tippfehler)! TkAgg ist ein Backend für Tk.
Dinvlad

1
Habe dies gerade für Matplotlib 2 / Python 3 getestet. Funktioniert unter Fenstern!
not_a_bot_no_really_82353

7

Dies ist eine Art Hacky und wahrscheinlich nicht tragbar. Verwenden Sie es nur, wenn Sie schnell und schmutzig suchen. Wenn ich die Figur nur viel größer als den Bildschirm einstelle, nimmt sie genau den gesamten Bildschirm ein.

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

In Ubuntu 16.04 mit Qt4Agg wird das Fenster maximiert (nicht im Vollbildmodus), wenn es größer als der Bildschirm ist. (Wenn Sie zwei Monitore haben, wird diese nur auf einem von ihnen maximiert.)


Funktioniert bei mir! Da versuche ich die Größe des Bildschirms zu bekommen.
StayFoolish

7

Ich fand dies für den Vollbildmodus unter Ubuntu

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

6

Ich verstehe mng.frame.Maximize(True) AttributeError: FigureManagerTkAgg instance has no attribute 'frame'auch.

Dann habe ich die Attribute durchgesehen mngund dabei Folgendes gefunden:

mng.window.showMaximized()

Das hat bei mir funktioniert.

Für Leute, die die gleichen Probleme haben, können Sie dies versuchen.

Meine Matplotlib-Version ist übrigens 1.3.1.


Vielen Dank! Diese Lösung hat bei mir gut funktioniert. Laufen unter Redhat Enterprise Linux 6, Python 2.7.10, Matplotlib 1.4.3.
CrossEntropy

Ich weiß, dass dadurch ein Vollbildfenster angezeigt wird, aber meine Diagramme werden beim Tippen in einem separaten Fenster angezeigt plt.show(). Nicht in diesem Vollbildfenster, irgendein Vorschlag?
StayFoolish

Es funktioniert auch unter Python 3.6 unter Debian und mit Qt-Backend.
Pbalaga

Dies läuft nicht unter Windows 10 64bit mit Python 3.7
George Sp

4

Meine bisher besten Bemühungen, verschiedene Backends zu unterstützen:

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

Durch Drücken der fTaste (oder ctrl+fin 1.2rc1), wenn Sie sich auf ein Diagramm konzentrieren, wird ein Diagrammfenster im Vollbildmodus angezeigt. Nicht ganz maximierend, aber vielleicht besser.

Um dies tatsächlich zu maximieren, müssen Sie GUI Toolkit-spezifische Befehle verwenden (sofern diese für Ihr spezifisches Backend vorhanden sind).

HTH


Dies erklärt, welche Taste ich versehentlich gedrückt habe, die meine Fenster im Vollbildmodus angezeigt hat! (Und wie man es rückgängig macht.)
cxrodgers

3

Die einzige Lösung, die unter Win 10 einwandfrei funktioniert hat.

import matplotlib.pyplot as plt

plt.plot(x_data, y_data)

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

2

In meinen Versionen (Python 3.6, Eclipse, Windows 7) funktionierten die oben angegebenen Snippets nicht, aber mit Hinweisen von Eclipse / pydev (nach Eingabe von: mng.) Fand ich Folgendes:

mng.full_screen_toggle()

Es scheint, dass die Verwendung von mng-Befehlen nur für die lokale Entwicklung in Ordnung ist ...


2

Versuchen Sie es mit der Methode 'Figure.set_size_inches' mit dem zusätzlichen Schlüsselwortargument forward=True. Laut Dokumentation sollte dies so sein die Figur Fenstergröße ändern.

Ob dies tatsächlich geschieht, hängt vom verwendeten Betriebssystem ab.


2

Hier ist eine Funktion, die auf der Antwort von @ Pythonio basiert. Ich kapsle es in eine Funktion, die automatisch erkennt, welches Backend es verwendet, und führe die entsprechenden Aktionen aus.

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

Versuchen Sie plt.figure(figsize=(6*3.13,4*3.13)), die Handlung größer zu machen.


1

Ok, das hat bei mir funktioniert. Ich habe die gesamte Option showMaximize () verwendet und die Größe Ihres Fensters wird proportional zur Größe der Figur geändert, aber die Leinwand wird nicht erweitert und "angepasst". Ich habe das gelöst durch:

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

plt.show()

0

Dies maximiert nicht unbedingt Ihr Fenster, ändert jedoch die Größe Ihres Fensters proportional zur Größe der Abbildung:

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

Dies kann auch hilfreich sein: http://matplotlib.1069221.n5.nabble.com/Resizing-figure-windows-td11424.html


0

Folgendes funktioniert möglicherweise mit allen Backends, aber ich habe es nur auf QT getestet:

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()

Rufen Sie dann maximize()vorher die Funktion aufplt.show()


Funktioniert nicht mit 2 Monitoren. Es ändert einfach die Fensterwebsite in die Bildschirmgröße (nicht in die Monitorgröße) und platziert sie auch nicht auf dem oberen linken Pixel des Bildschirms. @ ch271828n Lösung hat gut funktioniert
Alex
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.