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()
Santiago Lovera
quelle
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 .

gg349
quelle
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

Pythonio
quelle
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()
kwerenda
quelle
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())
Dan Christensen
quelle
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()
peschü
quelle
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? )

Dinvlad
quelle
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.)

Kennzeichen
quelle
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()
Westliches Weiß
quelle
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.

Alan Wang
quelle
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)
Martin R.
quelle
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

Pelson
quelle
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()
Zeds Zen
quelle
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 ...

Antti A.
quelle
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.

Roland Smith
quelle
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()
ch271828n
quelle
1

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

Navin
quelle
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()
ArmandduPlessis
quelle
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

Blairg23
quelle
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()
MikeTeX
quelle
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()

Adhun Thalekkara
quelle
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