MATLABのfigureファイル( .fig )から、グラフィックスに表示されている元となるデータ値を取得することはできますか?
154 ビュー (過去 30 日間)
古いコメントを表示
MathWorks Support Team
2009 年 10 月 14 日
編集済み: MathWorks Support Team
2018 年 4 月 26 日
figureファイル( .fig )のグラフィックスに表示させた元データを失ってしまいました。保存されている.figファイルからグラフィックスの元となるデータ値を取得する方法はありますか?
採用された回答
MathWorks Support Team
2018 年 4 月 26 日
編集済み: MathWorks Support Team
2018 年 4 月 26 日
figure内のlineオブジェクトやsurfaceオブジェクトの'XData'、'YData'、'ZData'プロパティにグラフィックスの元データが格納されています。これらのプロパティ値を取得することで対応可能です。
sine波を二次元プロットした以下の .fig ファイル(sine.fig)から元データを取得する例をご紹介します。
※今回の例は、figureオブジェクトに1つのaxes(軸)オブジェクト、軸オブジェクトに1つのラインオブジェクトがあるfigureです。subplotを使用しているなど、複数のaxesオブジェクトがあるときはデータを取得するaxesのハンドルを取得する必要があります。
まず、元となるsine.figを作成します。
%%サンプルfigureの作成
t = 0:0.01:1;
y = sin(2*pi*5*t);
plot(t,y);
savefig('sine.fig')
グラフィックオブジェクトのハンドル番号の取得の方法はひとつではなく、
にいくつかの方法が紹介されています。
ここでは、Childrenプロパティを使用して階層構造を利用する方法をご紹介します。
R2014b以後のバージョンでは
figureハンドルに対してChildrenメソッドを使用し、直接axesハンドルを取得可能です。
また、axesハンドルのChildren.XDataメソッドにより直接Xdataを取得可能です。
hfig = open('sine.fig');
ax1 = hfig.Children;
x1 = ax1.Children.XData;
y1 = ax1.Children.YData;
連続するメソッドを一文で指定することも可能です。すなわち、XDataの取得部分をより短く記述するには、
hfig = open('sine.fig');
x1 = hfig.Children.Children.XData;
y1 = hfig.Children.Children.YData;
とできます。ただし、プロパティの可読性とのトレードオフがあります。
R2014a以前のバージョンでは
以下のように、get関数を使用してプロパティを取得します。
hfig = open('sine.fig');
haxes = get(hfig,'children');%figure内のaxesのハンドル番号の取得
hline = get(haxes,'children');%lineオブジェクトの取得
X = get(hline,'XData');%'XData'プロパティ値の取得
Y = get(hline,'YData');%'YData'プロパティ値の取得
plot(X,Y)%再描画
以上の方法で、figureからグラフィックスの元データを取り出すことが可能です。
0 件のコメント
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!