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

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

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

dinvlad
fuente
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).

marca
fuente
¡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()
Westly White
fuente
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.

Alan Wang
fuente
¡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()
Zeds Zen
fuente
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)
Martín R.
fuente
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

Pelson
fuente
¡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 ...

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

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

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

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

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

Adhun Thalekkara
fuente
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.

ingeniero
fuente
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.

CRTejaswi
fuente