web-dev-qa-db-ja.com

MATLABで.figファイルからデータを抽出するにはどうすればよいですか?

これは本当に基本的なことですが、MATLABは初めてです。 .figファイルを開いた後、コマンドウィンドウでプロットされたデータを実際にどのように使用しますか?私が見るのはプロットだけです。実際にデータを取得する方法がわかりません。

22
sylvester

実際、データを取得するために図を表示する必要さえありません。 FIGファイルは標準のMatlab MAT形式で保存され、組み込みのload()関数を使用して読み取ることができます。 Figureのハンドルとデータは、簡単に理解して処理できる構造に保存されます。

17
Yair Altman

これは本当に簡単な方法です:

データを取得するオブジェクトをクリックします。クリックしたことを示す表示はありません。

>> xd = get(gco,'XData');
>> yd = get(gco,'YData');

線やその他のオブジェクト自体をクリックするのが難しい場合があります。この問題がある場合、興味のある子(ren)を含む軸をクリックしてから、

>> kids = get(gca,'Children');

これにより、さまざまな子へのハンドルの配列が提供されます。子供にインデックスを付けて、一度に1つずつ取得するか、次を使用してすべてのデータを一度に取得できます。これにより、結果がセル配列として返されます。これを使用したことがない場合は、少し注意が必要です。

>> xd = get(kids,'XData');
>> yd = get(kids,'YData');
>> xd1 = xd{1}; %# X Data from first line
13
Scott Hirsch

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');

を呼び出すことにより、Figureのハンドルhを調べることができます。

get(h)

または、以下を呼び出して、axes/titles/legendsを詳しく調べます。

ch=get(h,'Children');

私の例でコードを使用している場合、Figureの子は1つだけである必要があります。これがAxesです。軸の子を呼び出すと、1行になります。

l=get(ch,'Children');

次に、行の「Xdata」フィールドと「Ydata」フィールドを呼び出して、元のデータを取得します。

x=get(l,'Xdata');
y=get(l,'Ydata');

単なる軸よりも複雑な図がある場合、少し難しくなります。各子を調べて、それがデータを抽出したいプロットであるかどうかを判断する必要があります。

10
Doresoom

HGLOADコマンドを使用します。参照可能 こちら

2
Jordan Lewis