¿Cómo muestro una ventana de figura de matplotlib sobre todas las demás ventanas en Spyder?

Estoy utilizando el IDE de Spyder y encuentro que las ventanas de figuras de matplotlib siempre se muestran detrás de otras ventanas. Por ejemplo, inmediatamente después de iniciar Spyder, si plt.plot([0,1],[0,1]) en la consola, plt.plot([0,1],[0,1]) un diagtwig detrás de la ventana principal de Spyder. ¿Cómo puedo hacer que se visualicen nuevas ventanas de figuras en la parte superior de todas las demás ventanas?

Encontré esta solución ( hacer que la ventana de trazado de matplotlib aparezca como la activa ), pero no funciona para mí en Spyder. Me encuentro con problemas con fig.canvas.manager.window . Dice AttributeError: 'FigureManagerMac' object has no attribute 'window' .

Bueno, encontré la solución cuando estaba trabajando en otra cosa.

Cuando uso el backend de MacOSX , entonces fig.canvas.manager.window proporciona AttributeError: 'FigureManagerMac' object has no attribute 'window' . Sin embargo, cuando uso el backend TkAgg , entonces fig.canvas.manager tiene la window atributos. Por lo tanto, puedo implementar esta sugerencia de la siguiente manera:

 import matplotlib matplotlib.use('TkAgg') import matplotlib.pyplot as plt fig = plt.figure() plt.plot([0,1],[0,1]) #Put figure window on top of all other windows fig.canvas.manager.window.attributes('-topmost', 1) #After placing figure window on top, allow other windows to be on top of it later fig.canvas.manager.window.attributes('-topmost', 0) 

Bastante simple, ¿verdad? La primera parte difícil es que debes establecer el backend antes de importar pyplot. Cambiar el backend después no hace nada en mi experiencia. La segunda parte difícil es que el script de inicio científico de Spyder import matplotlib.pyplot as plt justo cuando import matplotlib.pyplot as plt el IDE de Spyder, por lo que no tienes oportunidad de configurar el backend antes de que se importe pyplot. La forma de solucionar esto es ir a Preferencias-> Consola-> Módulos externos, configurar el Backend GUI a TkAgg y reiniciar Spyder. Entonces el código de arriba funciona correctamente.

Anteriormente, estaba configurando el backend a través de matplotlib.rcParams['backend'] = 'TkAgg' justo después de lanzar Spyder. Sin embargo, cuando estaba haciendo otra cosa, comencé a recibir errores que mencionaban el backend de MacOSX . Esto no tenía ningún sentido para mí, ya que pensé que estaba usando TkAgg . La parte de enloquecimiento es cuando matplotlib.get_backend que devolvió TkAgg ! Aparentemente, configurar el backend después de importar pyplot actúa como si hubiera cambiado el backend, pero en realidad no lo hace. Argg !!