2016-07-22 10 views
-1

私はMATLAB(およびプログラミング全般)の新機能だと言ってこれを序文にしたいので、明確な回答に感謝します!MATLAB movie figure:dynamic data set

私は、異なる時間に撮影された50個ほどのデータセットを持っています(私は基本的にスペクトルが時間とともにどのように変化するかを見ています)。すべてのタイミングが等間隔であるわけではなく、すべての整数でもありません。

私はムービーのようにデータをプロットして、データセットが時間とともにどのように変化するかを示したいと思います。私はそれらを扱う方法を知らなかったので、非整数値をすべて削除した次のようなものを使って、動的なプロットを作成しました。(非効率または形式の悪いことを許してください)

for k = [6:1:10 12:2:20 25:25:100 500 1000 2000:2000:20000 25000:5000:40000 50000 100000:100000:400000] 
     plot(wl,sig(find(time==k),:)) 
     xlim([460 800]) 
     set(gca,'fontsize',24) 
     ylabel('\Delta T') 
     xlabel('Wavelength (nm)') 
     M(k)=getframe; 
    end 

    movie(M,3,10) 

しかし、これは単純に同じ数字上にすべてのデータセットをプロットするのを見ることができます。最後に、あなたは同じ数字の上に50以上のデータセットを一緒にプロットした数字が残っています。これは私が望むものではありません。 1つのデータセットを一度プロットし、しばらくするとデータセットが消え、次のデータセットが現れて、時間とともに変化する1つの生きているデータセットのように見えます。 (実際の時間変化を表す方法で各プロット間のタイミングを制御できるのもすばらしいことです.k値はナノ秒であり、現実的な量でスケーリングしたいと考えています。これが可能かどうか分かりません)

私は、このファイルをムービー形式で保存したいと思います。私は、MATLABを再生を繰り返すことを心配していません。また、各データセットの待ち時間(k値)を示す動的な凡例を作成することは、本当に役に立ちます。

私はこれがたくさんあることを知っていますが、本当に助けていただければ幸いです!ダイナミックなデータセットは物理科学では非常に一般的であり、プレゼンテーションに適した方法でこれを表現できることは、会談にとっては重要であると確信しているので、これは一般的に他の人々にも役立つことを期待しています。

ありがとうございます!

+1

これは非常に広い質問です。必要な追加機能を実装しようとすると、コードを投稿して何が起こっているのかを説明することができ、その理由を理解するのに役立ちます。私たちは無料で新しい機能を実装していません。 –

+0

あなたは、少なくともあなたがそれを行う方法を尋ねる前に、あなたが望む機能を実装しようとするなら、ここでもっと助けを得るでしょう。 –

答えて

0

作成するプロットごとにハンドルを作成し、次のプロットを描画する直前にdelete()を呼び出してください。さもなければ、あなたが知っているようにすべてのplatsが描かれたままになります。

for k = [6:1:10 12:2:20 25:25:100 500 1000 2000:2000:20000 25000:5000:40000 50000 100000:100000:400000] 
    if exist currentPlot 
     delete(currentPlot); 
    currentPlot = plot(wl,sig(find(time==k),:)) 
    xlim([460 800]) 
    set(gca,'fontsize',24) 
    ylabel('\Delta T') 
    xlabel('Wavelength (nm)') 
    M(k)=getframe; 
end 

movie(M,3,10) 
0

あなたが必要とするすべては、次のいずれかをプロットする前にビットを待つために各プロットのためである場合は、各ループの終了前にpause()であることを行うことができます。

はこのような何かを試してみてください。私。 pause(0.1)は0.1秒間一時停止し、pauseはキーを押すまで無期限に一時停止します。あなたが適切なビデオを書き込むために、以下の技術を使用することができます(おもちゃの例)

%% 
% *Create playable Movie structure within matlab* 
X = [1:100]; 
k = 0; clear M; 
for i = 1:0.01:10 
    k = k + 1; 
    Y = sin(i * X) ./ (X/i); 
    plot(X,Y); 
    M(k) = getframe; 
end 
movie(M,1,25) % play the movie. (look at the help file for various 
         % options you can use to control the movie playback) 

または次のように

また MATLAB内のムービーとして果たしている映画構造を作成することができますファイルに。

%% 
% *Export to video file* 
Vid = VideoWriter('./output.avi'); 
open(Vid); 
X = [1:100]; 
k = 0; clear M; 
for i = 1:0.01:10 
    k = k + 1; 
    Y = sin(i * X) ./ (X/i); 
    plot(X,Y); 
    axis([0 100 -2 2]) % size of video frames must not change! 
    writeVideo(Vid,getframe); 
end 
close(Vid); 
関連する問題