2016-05-22 7 views
1

Warum öffnet MATLAB ein Plotfenster, wenn ich eine .mat Datei lade, die eine Figur in einem struct enthält?Matlab 'Figurobjekte aus' .mat 'Datei laden öffnet Plotfenster

Das Problem, mit dem ich konfrontiert bin, ist, dass ich die Ausgabe eines Optimierungsalgorithmus als eine Sammlung von .mat Dateien habe. Jede .mat Datei enthält den Status jeder Generation des Algorithmus in Form einer einzelnen struct. Die Zustandsstruktur hat (neben anderen Variablen) ein Feld vom Typ matlab.ui.Figure. Wenn ich jetzt versuche, eine dieser Dateien mit dem Befehl load zu laden, öffnet sich automatisch ein Plot-Fenster.

MATLAB Workspace

Gibt es eine Möglichkeit MATLAB zu stoppen aus diesem Plot Fenster zu öffnen?

Ich verwende MATLAB 2015rb.

+1

AFAIK, dieses seltsame Verhalten wurde in den letzten MATLAB-Versionen hinzugefügt. Da ['.fig' Dateien tatsächlich' .mat' Dateien sind (http://undocumentedmatlab.com/blog/fig-files-format), könnte 'load (Dateiname,' - mat ') 'einfach funktionieren ... Wenn diese Lösung für Sie funktioniert, kann ich sie als Antwort posten. –

+0

@ Dev-iL Vielen Dank für die Antwort. Ich habe deine Lösung versucht, aber leider hat es nicht funktioniert. Trotzdem danke. – MxNx

+1

Ok, nächste Idee - haben Sie versucht, die gewünschte Variable mit ['matfile'] (http://www.mathworks.com/help/matlab/ref/matfile.html) zu laden? –

Antwort

5

Der Grund, dass es eine Abbildung anzeigt, ist, weil, wenn Sie Ihre state Struktur genau betrachten, dort ein figure Objekt darin gespeichert wird. Wenn Sie dieses Grafikobjekt (oder tatsächlich ein Objekt) aus einer Datei laden, rekonstruiert MATLAB das Objekt. Das definierte Verhalten beim Laden einer Figur (es ist loadobj Methode) ist das Öffnen der Figur. Dies ist ein aktuelles Problem, da ältere Versionen von gespeicherten MATLAB-Grafiken nur als Zahl behandelt werden und beim Laden eines Grafik-Handle aus der Datei hatte MATLAB keine Möglichkeit zu wissen, dass es eine Figur sein sollte, damit sie es analysieren würde als Zahl und gehe weiter, ohne ein neues Zahlenfenster anzuzeigen.

Leider seit Ihrem figure Griff innerhalb eines struct verschachtelt ist gibt es keine einfache Möglichkeit, nicht Last es. Wahrscheinlich ist es am einfachsten, das Figurenobjekt direkt nach dem Laden der Datei zu löschen (da Sie das Handle bereits haben).

data = load('filename.mat', 'state'); 
delete(data.state.hFigure); 

Und wenn Sie wirklich die Figur nicht mag sogar für eine zweite poping, können Sie die Standardfigur Visible Eigenschaft auf 'off' vor dem Laden gesetzt und dann danach zurückgesetzt.

% Determine what the visibility was 
prev = get(0, 'DefaultFigureVisible'); 

% Make it so figures don't appear 
set(0, 'DefaultFigureVisible', 'off') 

% Load data and delete the figure 
data = load('filename.mat', 'state'); 
delete(state.hFigure); 

% Reset the visibility 
set(0, 'DefaultFigureVisible', prev) 

Eine andere mögliche Lösung (die Sie nicht benötigen würde wissen, wo die figure Griffe in Ihrer Struktur sind) ist die DefaultFigureCreateFcn zu überschreiben, um einfach eine beliebige Zahl zu löschen, die erstellt wird.

% After this point you can't create any figures or they will delete themselves 
set(0, 'DefaultFigureCreateFcn', @(s,e)delete(s)) 

% Load your data (no figures!) 
load('filename.mat', 'state') 

% Allow figures to be created again 
set(0, 'DefaultFigureCreateFcn', '') 

In Zukunft dieses Verhalten zu vermeiden, sollten alle Grafiken nicht sparend Griffe in Ihrer .mat Dateien. Sie sind sehr große Objekte und MATLAB wird tatsächlich eine Warnung ausgeben, wenn Sie eine in eine Datei speichern, da dies nicht empfohlen wird.

Warnung: Die Abbildung ist in test.mat gespeichert. Das Speichern von Grafik-Handle-Variablen kann die Erstellung sehr großer Dateien verursachen. Um Grafiken Zahlen zu speichern, verwenden Sie savefig.

+1

Das hat sehr gut funktioniert und mein Problem ist gelöst. Vielen Dank. – MxNx

+0

Sie können 'close (gcf)' auch direkt nach dem Laden der Datei aufrufen. Aber danke für die erweiterte Antwort, ich fand die Option zur Deaktivierung der Figur Erstellung sehr nützlich! – JorgeGT

+0

@JorgeGT Sie * könnten * das tun, aber das macht eine Menge Annahmen über Ihre Datei (d. H. Es enthält nur eine Figur) und nimmt auch an, dass 'gcf' irgendwie auf diese Figur zeigt, was nicht immer eine Garantie ist. – Suever

Verwandte Themen