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
。