2015-11-26 14 views
5

私は一意の.figに異なるMatlabプロットを保存しました。 picture ここでは、ノイズを減らすためにこれらのプロットにフィルタを導入したいと思いますが、残念ながらこれらの信号を生成するコードが失われています。
この図の各信号のデータを抽出する方法はありますか? 私はこの試みた:matlabの図からデータを抽出するには?

open('ttc_delay1000.fig'); 
h = gcf; %current figure handle 
axesObjs = get(h, 'Children'); %axes handles 
dataObjs = get(axesObjs, 'Children'); %handles to low-level graphics objects in axes 

objTypes = get(dataObjs, 'Type'); %type of low-level graphics object 

xdata = get(dataObjs, 'XData'); %data from low-level grahics objects 
ydata = get(dataObjs, 'YData'); 

をしかし、私は混乱していますし、それが行動するための正しい方法だ場合、私は知りません。 ありがとう!あなたの問題のため

+0

さて、あなたのコードの生産は何でしょうか? –

+0

私はObjtypesとxdata、ydataを持っています。構造は5x1のセルで構成されています。これらの構造の各行には、各信号のデータが含まれています。そうですか? – Betelgeuse

+0

そうですね。)これらのデータに基づいて新しい人物のプロットを再現してみてください。それは確かに知る確実な方法です。ハンドルは通常、逆の順序でベクトルに格納されます。最後にプロットされたものは通常、リストの先頭にポップアップします。 –

答えて

7

ワンライナー:

data = get(findobj(open('ttc_delay1000.fig'), 'Type','line'), {'XData','YData'}); 

の手順は、(外側の呼び出しに内部の呼び出しから)があります。

  • は、ファイルを開きます。
  • ラインシリーズをご覧ください。
  • データを返します。

data{n,1}は言っLineSeriesYDataが含まれていますdata{n,2}を誘い込む、LineSeriesnXDataが含まれています。

あなたは図の直接のラインを滑らかにしたい場合は、考え方は同じです:

%//Prepare moving average filter of size N 
    N = 5; 
    f = @(x) filter(ones(1,N)/N, 1, x); 

    %//Smooth out the Y data of the LineSeries 
    hf = open('ttc_delay1000.fig'); 
    for hl = transpose(findobj(hf,'Type','line')) 
      set(hl, 'YData', f(get(hl,'YData'))); 
    end; 
    saveas(hf, 'ttc_delay1000_smooth.fig'); 
+0

待って、findobjは孫のために働く?私は何年も何をしてきたのですか? – BillBokeey

+0

@BillBokeey最初の引数がグラフィックハンドル(または配列)である場合、検索は実際にそれらのハンドルとその子孫に制限されます。 –

+0

ああ、ありがとう、私は私の人生で時間が少なくなったと感じています:) – BillBokeey

関連する問題