如何可视化2D矩阵中每个非零元素的跟踪?

时间:2015-08-03 07:05:23

标签: matlab visualization

我有一个2D矩阵,其中的元素是1或0.

enter image description here

随着时间的推移,这个矩阵会更新到w.r.t.一些其他变量。更新是这样的,矩阵的'1'元素在坐标中移动以将自身聚合到特定位置(可能是2D矩阵的中心)。

所以我想跟踪每个'1'元素向中心的运动。我怎么能意识到这一点?

1 个答案:

答案 0 :(得分:3)

此答案将帮助您完成积分的可视化及其移动历史记录,但它不会处理非零元素的跟踪

让我们从样本数据开始:

%% // sample data
nMax = 10 ;               %// Max size of matrice
M0 = randi([0 1],nMax) ;  %// populate with random "0" and "1"

[x,y] = find(M0==1) ;     %// find coordinates of "1"s
npt = numel(x) ;          %// how many have we got

然后我们绘制初始状态。我每1使用了2个图形对象:一个带有特定标记的单点显示,以显示" head"跟踪(点的最后位置)和一条虚线(没有标记)来显示历史记录。

%% // Display initial state
hf = figure ; hax = axes('Nextplot','Add') ;

for ip = 1:npt
    %// draw the lasp point (the "head")
    hp(ip) = plot( x(ip) , y(ip) , 'Marker','o' , 'LineStyle','none' ) ;
    %// draw the history line (empty at the moment, will populate later)
    hl(ip) = plot( x(ip) , y(ip) , 'Marker','none' , 'LineStyle',':' ) ;
end

set( hax , 'XLim',[0 nMax],'YLim',[0 nMax]) %// to fix axis limits

然后是动画本身。要移动点,在每次动画迭代时,我会向最后一个坐标添加一小部分。您必须使用自己的坐标更新替换该部分 然后我将新坐标与旧坐标连接起来,并更新每个图形对象:

%% // now do the animation
nHist = 30 ; %// number of history point to display on the trace

for animStep = 1:100
    %//                  Movement engine
    %// ---------------------------------------------------------
    %// Replace this block with your own point coordinate update
    x = [ x , x(:,end) + randi([-1 1],npt,1)/10 ] ;
    y = [ y , y(:,end) + randi([-1 1],npt,1)/10 ] ;
    x(x<0) = 0 ; x(x>nMax) = nMax ;   %// keep data within boundaries
    y(x<0) = 0 ; y(y>nMax) = nMax ;
    %// ---------------------------------------------------------


    %% // update display
    for ip = 1:npt
        %// update "Head" point
        set( hp(ip) , 'XData',x(ip,end)  ,'YData',y(ip,end) ) 

        %// update history trace
        idxTrace = max(1,size(x,2)-nHist):size(x,2) ;
        set( hl(ip) , 'XData',x(ip,idxTrace)  ,'YData',y(ip,idxTrace) ) 
    end
    drawnow
    pause(0.1)

end

产生以下内容:

animpoint

您可以调整变量nHist以更改要显示的历史记录点数。

您也可以更改&#34; head&#34;如果在矩阵中有太多的标记,则标记为较小的标记。