1

.mat内に Figure を含むファイルを読み込むと、MATLAB がプロット ウィンドウを開くのはなぜstructですか?

私が直面している問題は、最適化アルゴリズムの出力を.matファイルのコレクションとして持っていることです。各.matファイルには、アルゴリズムの各世代の状態が単一の形式で含まれていますstruct。状態構造体には (他の変数の中でも) type のフィールドがありmatlab.ui.Figureます。コマンドでこれらのファイルを読み込もうとするとload、プロット ウィンドウが自動的に開きます。

MATLAB ワークスペース

MATLAB がこのプロット ウィンドウを開かないようにする方法はありますか?

MATLAB 2015rb を使用しています。

4

1 に答える 1

5

state図が表示されているのは、構造をよく見るとそこにfigureオブジェクトが格納されているためです。このグラフィックス オブジェクト (実際には任意のオブジェクト) をファイルから読み込むと、MATLAB はオブジェクトを再構築します。Figure をロードするための定義された動作 (loadobjメソッド) は、Figure を開くことです。

これは最近の問題です。以前のバージョンの MATLAB はグラフィックス ハンドルを単なる数値として格納し、ファイルからグラフィックス ハンドルをロードするとき、MATLAB はそれが Figure であることを認識する方法がなかったため、数値として解析し、新しい Figure ウィンドウを表示せずに先に進みます。

残念ながら、figureハンドルは 内にネストされているため、ロードしないstruct簡単な方法はありません。おそらく最も簡単な方法は、ファイルをロードした直後に Figure オブジェクトを削除することです (既にハンドルを持っているため)。

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

Figure が一瞬でもポップアップするのが気に入らない場合は、ロードする前にデフォルトの FigureVisibleプロパティを'off'に設定し、後でリセットすることができます。

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

別の潜在的な解決策 (ハンドルが構造体のどこにあるかを知る必要がないfigure) は、 を上書きして、DefaultFigureCreateFcn作成された Figure を単純に削除することです。

% 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', '')

今後、この動作を回避するには、.mat ファイル内にグラフィックス ハンドルを保存しないことを検討してください。これらは非常に大きなオブジェクトであり、MATLAB は推奨されていないため、ファイルに保存するときに実際に警告を発行します。

警告: Figure は test.mat に保存されます。グラフィックス ハンドル変数を保存すると、非常に大きなファイルが作成される可能性があります。グラフィック図を保存するには、 を使用しますsavefig

于 2016-05-22T15:29:51.073 に答える