5

MATLAB内の一定期間にわたる空間全体のデータポイントの動きを視覚化したいと思います。ただし、図を表示する方法は、常に1つの瞬間だけがプロットされるようにすることです。それは簡単でした。データ内の座標(x、y、z)のすべてのセットに対して3Dプロット表示を更新するためのforループを作成しただけです。ただし、このプロットの4つの異なる視野角を常に表示したいと思います。私はMATLAB内でサブプロットを設定する方法をよく知っていますが、それは問題ではありません。私の問題は、これら4つのサブプロットすべてを同時に実行して、4つのサブプロットすべてが常に同じ時点を表示するようにすることです。

この問題を処理する方法は?

要求に応じて、単一のプロットを持つ図のコードを以下に示します。

datan = DATA; %data in form of x,y,z,a,b,c by column for row# of time points

tib=zeros(size(datan,1),12);
tib(:,1:3) = datan(:,1:3);
tib_ref=tib(1,1:3);

for i=1:size(datan,1)
tib(i,1:3)=tib(i,1:3)-tib_ref;
end

angle_to_dircos

close all

figure('Name','Directions (Individual Cycles)','NumberTitle','off')

for cc=1:2
    hold off
    for bb=1:10:size(tib,1);
    scatter3(tib(bb,1),tib(bb,2),tib(bb,3),'green','filled'); %z and y axes are flipped in polhemus system
    hold on
       p0 = [tib(bb,1),tib(bb,2),tib(bb,3)]; 
       p1 = [tib(bb,1)+10*tib(bb,4),tib(bb,2)+10*tib(bb,5),tib(bb,3)+10*tib(bb,6)]; 
       p2 = [tib(bb,1)+10*tib(bb,7),tib(bb,2)+10*tib(bb,8),tib(bb,3)+10*tib(bb,9)];
       p3 = [-(tib(bb,1)+100*tib(bb,10)),-(tib(bb,2)+100*tib(bb,11)),-(tib(bb,3)+100*tib(bb,12))];      
       vectarrow(p0,p1,1,0,0)
       hold on
       vectarrow(p0,p2,0,1,0)
       hold on
       vectarrow(p0,p3,0,0,1)
       hold on
    az = 90;
    el = 0;
    view(az, el);
    xlim([-50,50]);
    ylim([-50,50]);
    zlim([-50,50]);
    xlabel('distance from center in X');
    ylabel('distance from center in Y');
    zlabel('distance from center in Z');
    title('XYZ Scatter Plots of Tracker Position');
    hold on
    plot3(0,0,0,'sk','markerfacecolor',[0,0,0]);
       p0 = [0,0,0]; 
       p1 = [10,0,0]; 
       p2 = [0,10,0];
       p3 = [0,0,100];      
       vectarrow(p0,p1,1,0,0)
       hold on
       vectarrow(p0,p2,0,1,0)
       hold on
       vectarrow(p0,p3,1,0,1)
    drawnow;
end
end
4

1 に答える 1

4

毎回プロットを完全に再作成するのではなく、ポイントのxデータとyデータを更新するために使用する場合set、Matlabがを待機しているため、更新は同時に行われdrawnowます。

これが例です

figure,
subplot(1,2,1),plot(rand(10,1),rand(10,1),'.'),hold on,p1=plot(rand(1),rand(1),'.r')
subplot(1,2,2),plot(rand(10,1),rand(10,1),'.'),hold on,p2=plot(rand(1),rand(1),'.r')

%# read the red coordinates - I should have stored them before plotting :)
x(1) = get(p1,'xdata');y(1)=get(p1,'ydata');x(2)=get(p2,'xdata');y(2)=get(p2,'ydata');

%# animate
for i=1:100,
   delta = randn(1,2)*0.01;
   x=x+delta(1);
   y=y+delta(2);
   set(p1,'xdata',x(1),'ydata',y(1));
   set(p2,'xdata',x(2),'ydata',y(2));
   pause(0.1),
   drawnow, %# I put this in case you take out the pause
end
于 2012-11-19T22:54:25.233 に答える