これは本当に基本的なことですが、MATLAB は初めてです。.fig ファイルを開いた後、プロットされたデータをコマンド ウィンドウで実際にどのように操作しますか? 私が見るのはプロットだけです。実際にデータを取得する方法がわかりません。
4 に答える
実際には、データを取得するために Figure を表示する必要さえありません。FIG ファイルは標準の Matlab MAT 形式で保存され、組み込みのload()関数を使用して読み取ることができます。Figure のハンドルとデータは、簡単に理解して処理できる構造に格納されます。
これが本当に簡単な方法です:
データを取得するオブジェクトをクリックします。クリックしたことを示すものはありません。
>> xd = get(gco,'XData');
>> yd = get(gco,'YData');
線や他のオブジェクト自体をクリックするのが難しい場合があります。この問題が発生した場合は、関心のある子を含む軸をクリックしてから、次のようにします。
>> kids = get(gca,'Children');
これにより、さまざまな子に一連のハンドルが提供されます。子供にインデックスを付けて一度に1つずつ取得するか、次を使用してすべてのデータを一度に取得することができます。これにより、結果がセル配列として返されます。これまでに使用したことがない場合は、少し注意が必要です。
>> xd = get(kids,'XData');
>> yd = get(kids,'YData');
>> xd1 = xd{1}; %# X Data from first line
hgloadを試してから、返されるグラフィックハンドル構造を調べてください。たとえば、以下をプロットして保存すると、次のようになります。
x=0:.01:10;
y=sin(x);
h=plot(x,y);
saveas(h,'testfigure.fig');
ワークスペースをクリアし、hgloadを使用して保存したFigureを開きます。
clear
close all
h=hgload('testfigure.fig');
を呼び出すことにより、フィギュアのハンドルhを調べることができます
get(h)
または、を呼び出して、軸/タイトル/凡例をさらに詳しく調べます
ch=get(h,'Children');
私の例のコードを使用している場合、図の子は1つだけにする必要があります。これは、軸になります。軸の子を呼び出すと、1行になります。
l=get(ch,'Children');
次に、行の「Xdata」フィールドと「Ydata」フィールドを呼び出すと、元のデータが得られます。
x=get(l,'Xdata');
y=get(l,'Ydata');
軸だけでなく複雑な図形を使用すると、少し難しくなります。データを抽出したいプロットであるかどうかを判断するには、各子を探索する必要があります。
HGLOAD コマンドを使用します。リファレンスはこちらから入手できます。