Ich arbeite mit Python und Matplotlib auf Mac os x . Wenn ich an vielen verschiedenen Fenstern arbeite und ein Skript ausführen muss, das einen Plot erzeugt, wird das Plotfenster immer hinter dem aktiven Fenster geöffnet und ist sehr frustrierend Müssen Sie zwischen Fenstern wechseln, um das Bild anzusehen ... Ist es ein Grund, die Position des Plotfensters zu bestimmen und/oder es als Vordergrundfenster zu öffnen?
vielen Dank
Mich hat genau das gleiche Problem gestört. Ich habe endlich eine Lösung gefunden (im Pylab-Modus mit qt4agg-Backend):
get_current_fig_manager().window.raise_()
oder
fig = gcf()
fig.canvas.manager.window.raise_()
Grüße, Markus
Für mich (OSX 10.10.2, Matplotlib 1.4.3) ändert sich das Matplotlib-Backend in TkAgg. Bevor Sie pyplot oder irgendetwas importieren, gehen Sie zu:
import matplotlib
matplotlib.use('TkAgg')
Plot-Fenster werden jetzt eingeblendet und können als Befehls-Tab bezeichnet werden.
Ich fand diese Lösung so oft nötig (z. B. bei der Verwendung der Spyder-IDE), dass ich sie in eine Funktion packte.
def show_plot(figure_id=None):
if figure_id is None:
fig = plt.gcf()
else:
# do this even if figure_id == 0
fig = plt.figure(num=figure_id)
plt.show()
plt.pause(1e-9)
fig.canvas.manager.window.activateWindow()
fig.canvas.manager.window.raise_()
Ich habe eine gute Antwort in diesem Thread gefunden: Wie lässt man ein Tkinter-Fenster nach vorne springen?
Grundsätzlich sollen Fensterattribute verwendet werden. Setzen Sie das Attribut '-topmost' auf True (1), um das Fenster in den Vordergrund zu bringen, und legen Sie es auf False (0) fest, damit später andere Fenster angezeigt werden können davor. Hier ist der Code, der für mich funktioniert hat:
import matplotlib.pyplot as plt
wm = plt.get_current_fig_manager()
wm.window.attributes('-topmost', 1)
wm.window.attributes('-topmost', 0)
Für MacOS Sierra und Python 3.6 Matplotlib 2.0.0
get_current_fig_manager().show()
die obige Zeile macht den Job nichts anderes nötig.
Das hat für mich funktioniert !!
(Getestet unter Mac OS X 10.11, Spyder 2.3.5.2 - Python 3.4)
Gehen Sie zu Preferences> IPython Console> Graphics und setzen Sie ein Backend auf Qt (danach müssen Sie den Kernel neu starten).
Erstellen Sie eine Datei, die Folgendes enthält:
def raise_window(figname=None):
if figname: plt.figure(figname)
cfm = plt.get_current_fig_manager()
cfm.window.activateWindow()
cfm.window.raise_()
und importieren Sie es beim Start (Voreinstellungen> IPython-Konsole> Start> Datei ausführen). Rufen Sie einfach die Funktion raise_window()
unter Ihrem Code auf.
Beispiel:
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(-np.pi, np.pi, 256)
C, S = np.cos(X), np.sin(X)
plt.figure()
plt.plot(X, C)
plt.plot(X, S)
raise_window()
Für mich funktionieren nur die folgenden (mit TkAgg Backend):
plt.gcf().canvas.get_tk_widget().focus_force()
Sie können einstellen
backend : MacOSX
in Ihrer matplotlibrc
-Datei für eine dauerhafte Lösung.
Es funktioniert für mich auf Macos Mojave, mit Matplotlib 2.1.2. Andere Benutzer haben sich jedoch darüber beschwert, dass es für sie nicht funktioniert, sodass andere Einstellungen sie möglicherweise beeinflussen
Ab matplotlib 1.5.1 unter MacOSX 10.11.6 können Sie beim Starten einer iPython (5.0.0, Python: 3.5.2) Shell und use% matplotlib einen Matplotlib-Plot nach vorne bringen.
>>> %matplotlib
Using matplotlib backend: MacOSX
>>> import matplotlib.pyplot as plt
>>> plt.plot([1,3,2,4])
>>> plt.show()
** Edit: Hinweis scheint zu sein % pylab nicht zu verwenden da der globale Namensraum verschmutzt wird **
.. Shell und Verwendung von %pylab
können Sie einen Matplotlib-Plot nach vorne bringen, indem Sie:
>>> %pylab
Using matplotlib backend: MacOSX
Populating the interactive namespace from numpy and matplotlib
>>> plot([1,3,2,4])
>>> show()