Cómo maximizar una ventana plt.show () usando Python


95

Solo por curiosidad, me gustaría saber cómo hacer esto en el siguiente código. He estado buscando una respuesta pero es inútil.

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, trabajando en Windows: plt.get_current_fig_manager().window.state('zoomed')entonces plt.show().
Basj

1
no funciona para mí
Johan

Respuestas:


37

Yo suelo usar

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

antes de la llamada a plt.show(), y obtengo una ventana maximizada. Esto funciona solo para el backend 'wx'.

EDITAR:

para el backend de Qt4Agg, consulte la respuesta de kwerenda .


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

2
Funciona con backend wx, he actualizado la publicación en consecuencia. Es probable que el backend de Tk que está utilizando no admita esta función. ¿Tiene la opción de cambiar el backend de matplotlib a 'wx'?
gg349

11
error en mac: mng.frame.Maximize (True) AttributeError: El objeto 'FigureManagerMac' no tiene atributo 'frame'
user391339

7
¿Existe una solución conocida para hacer esto en el MacOSXbackend? El FigureManagerMacparece tener ni el atributo windowni frame.
McLawrence

3
Tengo el mismo problema en Windows
RollRoll

169

Estoy en Windows (WIN7), ejecutando Python 2.7.5 y Matplotlib 1.3.1.

Pude maximizar las ventanas de Figura para TkAgg, QT4Agg y wxAgg usando las siguientes líneas:

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

Espero que este resumen de las respuestas anteriores (y algunas adiciones) combinado en un ejemplo funcional (al menos para Windows) ayude. Salud


7
### funciona en Ubuntu ??? >> NO funcionó en windows mng.resize (* mng.window.maxsize ()) # funciona perfecto en linux para mí
Daniele

1
@Daniele, tu solución me funciona en TkAgg en Ubuntu. ¡Gracias! Pero me tomó un tiempo analizarlo;) Tal vez deshacerse de todo antes de "mng.resize ...".
BenB

1
¿Existe una manera fácil de comprobar qué backend está utilizando? un poco usado error final de prueba ahora.
Rutger Hofste

1
Desafortunadamente, probé su código con Qt5Agg, cuando escribí, apareció figManager.window.showMaximized()la ventana de pantalla completa maximizada. La siguiente línea: plt.show()simplemente muestre otra ventana que traza los datos en una ventana de tamaño normal.
StayFoolish

3
La solución basada en Tk no me funciona: _tkinter.TclError: bad argument "zoomed": must be normal, iconic, or withdrawn(Ubuntu 16.04).
bluenote10

77

Con Qt backend (FigureManagerQT), el comando adecuado es:

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

1
Esto todavía requiere plt.show()después. Sin embargo, es una gran respuesta, ¡funciona en Windows!
lucidbrot

El objeto '_tkinter.tkapp' tiene el atributo bi 'showMaximized'. Siempre más convencido de que Python es una broma más que un lenguaje
HAL9000

1
@ HAL9000 Primero, esto es para Qt4, no Tk. En segundo lugar, está culpando a un lenguaje por lo que es un problema de diseño de paquete externo. Puede tener este tipo de problema en cualquier idioma.
Jeff Learman

Me subo AttributeError: '_tkinter.tkapp' object has no attribute 'showMaximized'a Windows.
Basj

45

Esto hace que la ventana ocupe la pantalla completa para mí, en Ubuntu 12.04 con el backend de TkAgg:

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

6
Tenga en cuenta que esto tiene efectos extraños en una configuración de varios monitores. La ventana utilizará todos los monitores, en lugar de maximizarse.
user1202136

2
Esto no creará una ventana maximizada (que debe ajustarse a los bordes de la pantalla), sino que creará una ventana no maximizada con el tamaño de una maximizada.
Hola

Esto también maximiza con éxito la ventana en Ubuntu 14.04, manteniendo la barra superior con los botones que todos conocemos.
Irene

Funciona en Ubuntu 16.04 y linux mint. Python2.7 probado
user1941407

@ user1202136 Funcionó bien para mí en una configuración de 3 monitores.
Michael Litvin

40

Para mí, nada de lo anterior funcionó. Utilizo el backend de Tk en Ubuntu 14.04 que contiene matplotlib 1.3.1.

El siguiente código crea una ventana de gráfico de pantalla completa que no es lo mismo que maximizar, pero sirve muy bien para mi propósito:

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

1
Esta también fue la solución que funcionó para mí (aunque va a pantalla completa, no a la ventana maximizada). Ejecutando en Redhat Enterprise Linux 6, python 2.7.10, matplotlib 1.4.3.
CrossEntropy

1
Me funcionó en Visual Studio 2015 en Windows 10 x64, python 3.5, excepto que no pude acceder al borde de la ventana para cerrar la figura, ya que estaba por encima de los píxeles de la pantalla superior.
David Cuccia

1
Para mí, esto tampoco crea una ventana maximizada, sino una de pantalla completa. No obtuve ningún botón de minimizar, maximizar / restaurar y cerrar como las ventanas normales y tuve que hacer clic derecho en la ventana en la barra de tareas para poder cerrarla.
Hola

1
Esto va a pantalla completa sin mostrar los botones que tiene cada ventana. Probé en Ubuntu 14.04.
Irene

1
Trabajando como un encanto en Raspbian (jessie)
anatol

37

Esto debería funcionar (al menos con TkAgg):

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

(adoptado de lo anterior y usando Tkinter, ¿hay alguna manera de obtener el tamaño de pantalla utilizable sin hacer zoom visible en una ventana? )


1
¡Hurra! Esto funcionó para mí; crea una ventana maximizada que se ajusta a los bordes de la pantalla y tiene los botones minimizar, maximizar / restaurar y cerrar como debería.
Hola

1
Sin embargo, quieres decir que esto funciona con TkAgg, no TkApp, ¿verdad?
Hola

¡Buena captura (probablemente un error tipográfico)! TkAgg es un backend para Tk.
dinvlad

3
Acabo de probar esto para matplotlib 2 / python 3. ¡Funciona bajo ventanas!
not_a_bot_no_really_82353

7

Esto es un poco hacky y probablemente no sea portátil, solo utilícelo si lo que busca es rápido y sucio. Si configuro la figura mucho más grande que la pantalla, ocupa exactamente toda la pantalla.

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

De hecho, en Ubuntu 16.04 con Qt4Agg, maximiza la ventana (no la pantalla completa) si es más grande que la pantalla. (Si tiene dos monitores, simplemente lo maximiza en uno de ellos).


¡Funciona para mi! Mientras trato de obtener el tamaño de la pantalla.
StayFoolish

7

Encontré esto para el modo de pantalla completa en Ubuntu

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

6

Yo mng.frame.Maximize(True) AttributeError: FigureManagerTkAgg instance has no attribute 'frame'también.

Luego miré a través de los atributos mngtiene y encontré esto:

mng.window.showMaximized()

Eso funcionó para mí.

Entonces, para las personas que tienen el mismo problema, pueden probar esto.

Por cierto, mi versión de Matplotlib es 1.3.1.


¡Gracias! Esta solución funcionó bien para mí. Ejecutando en Redhat Enterprise Linux 6, python 2.7.10, matplotlib 1.4.3.
CrossEntropy

Sé que aparecerá una ventana de pantalla completa, pero mis gráficos aparecerán en una ventana separada cuando escribo plt.show(). No en esta ventana de pantalla completa, ¿alguna sugerencia?
StayFoolish

También funciona en python 3.6 en Debian y con el backend de Qt.
pbalaga

esto no se ejecuta en Windows 10 de 64 bits con Python 3.7
George Sp

4

La única solución que funcionó perfectamente en 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

Mi mejor esfuerzo hasta ahora, apoyando diferentes backends:

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

Al presionar la ftecla (o ctrl+fen 1.2rc1) cuando se enfoca en un gráfico, aparecerá una ventana de gráfico en pantalla completa. No maximizando, pero quizás mejor.

Aparte de eso, para maximizar realmente, necesitará usar comandos específicos de GUI Toolkit (si existen para su backend específico).

HTH


¡Esto explica qué tecla seguí presionando accidentalmente que apantallaba completamente mis ventanas! (Y cómo deshacerlo)
cxrodgers

2

En mis versiones (Python 3.6, Eclipse, Windows 7), los fragmentos dados anteriormente no funcionaron, pero con las sugerencias dadas por Eclipse / pydev (después de escribir: mng.), Encontré:

mng.full_screen_toggle()

Parece que usar mng-commands está bien solo para el desarrollo local ...


2

Intente usar el método 'Figure.set_size_inches', con el argumento de palabra clave adicional forward=True. Según la documentación , esto debería cambiar el tamaño de la ventana de la figura.

Que eso suceda realmente dependerá del sistema operativo que esté utilizando.


2

Aquí hay una función basada en la respuesta de @ Pythonio. Lo encapsulo en una función que detecta automáticamente qué backend está usando y realiza las acciones correspondientes.

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

Intenta plt.figure(figsize=(6*3.13,4*3.13))hacer la trama más grande.


1

Ok, esto es lo que funcionó para mí. Hice toda la opción showMaximize () y cambia el tamaño de la ventana en proporción al tamaño de la figura, pero no se expande ni se "ajusta" al lienzo. Resolví esto por:

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

plt.show()

0

Esto no maximiza necesariamente su ventana, pero cambia el tamaño de su ventana en proporción al tamaño de la 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

Esto también podría ayudar: http://matplotlib.1069221.n5.nabble.com/Resizing-figure-windows-td11424.html


0

Lo siguiente puede funcionar con todos los backends, pero lo probé solo en 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()

Luego llame a la función maximize()antesplt.show()


No funciona con 2 monitores. Simplemente cambia el sitio de la ventana al tamaño de la pantalla (no al tamaño del monitor) y tampoco lo coloca en el píxel superior izquierdo de la pantalla. @ ch271828n solución funcionó bien
Alex

0

Para el backend GTK3Agg , use maximize(), especialmente con una m minúscula :

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

Probado en Ubuntu 20.04 con Python 3.8.


0

Para el backend basado en Tk (TkAgg), estas dos opciones maximizan y pantalla completa la ventana:

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

Al trazar en varias ventanas, debe escribir esto para cada ventana:

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

Aquí, ambas 'figuras' están trazadas en ventanas separadas. Usando una variable como

figure_manager = plt.get_current_fig_manager()

es posible que no maximice la segunda ventana, ya que la variable aún se refiere a la primera ventana.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.