usar nombre new figuras crear como comando cambiar matlab focus plot window-management

new - nombre a figuras matlab



Inhibir Matlab Window Focus Stealing (2)

¿Hay alguna manera de decirle a Matlab que no robe el foco de la ventana (de un editor externo) como Emacs) en comandos gráficos como la figure y el plot . Esto aumentaría mucho mi productividad porque a menudo quiero continuar el desarrollo del código durante el proceso de (re) procesamiento de datos.


Es posible, el truco es no usar la declaración de figura, sino cambiar la figura actual directamente. Esto cambiará la gráfica activa sin cambiar el foco. Normalmente hago algo como esto:

function change_current_figure(h) set(0,''CurrentFigure'',h)

Entonces, todas las declaraciones de la figura (h) deben cambiarse a change_curent_figure (h).

Tenga en cuenta que esto está incluido en la documentación de matlab.

Cabe señalar que esto solo funciona si la figura ya está creada. Si se van a crear periódicamente figuras nuevas, se podrían crear las figuras como las primeras líneas de código, guardar los identificadores, hacer el procesamiento y luego trazarlos. Este ejemplo funcionaría. Tenga en cuenta que el comando drawow vaciará el buffer del evento, asegurándose de que todas las figuras estén trazadas.

He visto este trabajo desde 2007 hasta 2010, no estoy seguro de si la versión más reciente o anterior lo admite, aunque no tengo motivos para sospechar que no lo haga.

fig1=figure; fig2=figure; drawnow; [a b]=do_complex_processing; change_current_figure(fig1) plot(a); change_current_figure(fig2) plot(b);


Tengo la misma pregunta, con la complejidad adicional de que las cifras de creación de código provinieron de un proveedor externo, y no quise modificarlo. Aquí hay dos posibilidades (identificadas con la ayuda del soporte de MathWorks) probadas en Matlab 2014b:

1. Genere las figuras sin mostrarlas, luego muéstrelas después de completar el código

set(0, ''DefaultFigureVisible'', ''off''); for i = 1:10 fprintf(''i: %g/n'', i) figure; pause(1); end set(0, ''DefaultFigureVisible'', ''on''); figHandles = findall(0, ''Type'', ''figure''); set(figHandles(:), ''visible'', ''on'')

Este código hace exactamente lo que se necesita, pero el inconveniente adicional es que no se puede ver ningún progreso en la ejecución del código, por lo que no se puede interrumpir un largo plazo si algo sale mal.

2. Atraque las figuras

  1. Crea una nueva figura:

    figure

  2. Acoplelo:

    Esto colocará la figura en la ventana IDE de Matlab.

  3. Hacer nuevas figuras atracadas y ejecutar el código:

    set(0, ''DefaultFigureWindowStyle'', ''docked''); for i = 1:10 fprintf(''i: %g/n'', i) figure; pause(1); end set(0, ''DefaultFigureWindowStyle'', ''normal'');