Cómo maximizar una ventana plt.show()

7 minutos de lectura

Avatar de usuario de Santiago Lovera
santiago lovera

Solo por curiosidad, me gustaría saber cómo hacer esto en el código a continuación. 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()

Avatar de usuario de Pythonio
pitonio

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

si desea maximizar varias cifras, puede usar

for fig in figs:
    mng = fig.canvas.manager
    # ...

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

  • ### funciona en Ubuntu??? >> NO funcionó en Windows mng.resize(*mng.window.maxsize()) #funciona perfectamente en Linux para mí

    – Danielle

    7 junio 2015 a las 16:47


  • @Daniele, su solución me funciona en TkAgg en Ubuntu. ¡Gracias! Pero me tomó un tiempo analizarlo;) Tal vez deshacerme de todo antes de “mng.resize…”.

    – Ben B

    4 de octubre de 2015 a las 7:09


  • ¿Hay una manera fácil de verificar qué backend está usando? un poco usado error de final de prueba ahora.

    –Rutger Hofste

    08/06/2016 a las 21:00


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

    – Mantente tonto

    27 de abril de 2017 a las 3:43

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

    – bluenote10

    3 de julio de 2018 a las 12:22

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

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

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

    – lucidbrot

    24 de septiembre de 2018 a las 7:39


  • El objeto ‘_tkinter.tkapp’ tiene el atributo bi ‘showMaximized’. Siempre más convencidos de que Python es una broma más que un lenguaje

    – HAL9000

    11 de septiembre de 2019 a las 15:46


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

    –Jeff Learman

    25 de noviembre de 2019 a las 14:46


  • yo obtengo AttributeError: '_tkinter.tkapp' object has no attribute 'showMaximized' en Windows

    – Basj

    9 de noviembre de 2020 a las 11:48

  • Funciona con el backend PyQt5 para mí.

    – Stefan

    21 de enero de 2021 a las 17:34

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

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

  • Tenga en cuenta que esto tiene efectos extraños en una configuración de varios monitores. La ventana usará todos los monitores, en lugar de estar maximizada.

    – usuario1202136

    17 de abril de 2013 a las 14:08

  • Esto no creará una ventana maximizada (que debería ajustarse a los bordes de la pantalla), pero creará una ventana no maximizada con el tamaño de una maximizada.

    – Hola Adios

    6 de febrero de 2017 a las 11:45

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

    – irene

    12 de junio de 2017 a las 13:25


  • Funciona en Ubuntu 16.04 y Linux Mint. python2.7 probado

    – usuario1941407

    11 de agosto de 2018 a las 22:04


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

    –Michael Litvin

    17 de enero de 2020 a las 12:19

avatar de usuario de dan
dan

Esto debería funcionar (en el 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 visiblemente en una ventana?)

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

El siguiente código crea una ventana de trazado 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()

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

    – Vahid S. Bokharaie

    9 de septiembre de 2015 a las 8:25

  • Trabajó para mí dentro de 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 sobre los píxeles de la pantalla superior.

    – luzw8

    20 de agosto de 2016 a las 0:26

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

    – Hola Adios

    6 de febrero de 2017 a las 11:51

  • Esto va a pantalla completa sin mostrar los botones que tiene cada ventana. Probado en Ubuntu 14.04.

    – irene

    12 de junio de 2017 a las 13:28

  • Trabajando a las mil maravillas en Raspbian (jessie)

    – anatol

    9 de julio de 2017 a las 22:54

Avatar de usuario de la comunidad
Comunidad

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.

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

    – Vahid S. Bokharaie

    9 de septiembre de 2015 a las 8:25

  • Trabajó para mí dentro de 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 sobre los píxeles de la pantalla superior.

    – luzw8

    20 de agosto de 2016 a las 0:26

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

    – Hola Adios

    6 de febrero de 2017 a las 11:51

  • Esto va a pantalla completa sin mostrar los botones que tiene cada ventana. Probado en Ubuntu 14.04.

    – irene

    12 de junio de 2017 a las 13:28

  • Trabajando a las mil maravillas en Raspbian (jessie)

    – anatol

    9 de julio de 2017 a las 22:54

Avatar de usuario de Felix Bernhard
Félix Bernardo

Mi mejor esfuerzo hasta ahora, soportando diferentes backends:

from platform import system
def plt_maximize():
    # See discussion: https://stackoverflow.com/questions/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() == "Windows":
            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)

¿Ha sido útil esta solución?