绘制Centroid @每次迭代

时间:2011-09-10 05:57:08

标签: matlab plot

我有一个场景,我在每次迭代时生成矩阵 C C 矩阵维度为2 x n。 C 矩阵中的每一列都是一个二维质心,我们在 C 矩阵中有 n 质心。

由于每次迭代都会更新 C 矩阵,因此会更新质心。我想绘制质心1的运动(这是第1列)。该图应该通过在点之间绘制箭头来指示从前一次迭代到当前迭代的质心1的移动。

我试图在matlab中使用分散函数。

2 个答案:

答案 0 :(得分:1)

考虑以下示例:

%# matrix of centroids
n = 5;
C = rand(2,n);

%# set up graphic objects
hScatter = gscatter(C(1,:), C(2,:), 1:n, [], [], 30); hold on
hQuiver = quiver(nan,nan,nan,nan);
set(hQuiver, 'AutoScale','off', 'Color','k')
axis([-10 10 -10 10])
drawnow, pause(1)

%# update and show C each iteration
for i=1:10
    %# update centroids
    oldC = C;
    C = C + randn(size(C));

    %# update centroids to new locations
    set(hScatter, {'XData'},num2cell(C(1,:))', {'YData'},num2cell(C(2,:))')

    %# plot arrow showing movement from old to new locations
    set(hQuiver, 'XData',oldC(1,:), 'YData',oldC(2,:), ...
        'UData',C(1,:)-oldC(1,:), 'VData',C(2,:)-oldC(2,:))

    %# show iteration number
    title( sprintf('Iteration %d',i) )

    %# refresh plot
    drawnow, pause(1)
end

enter image description here

答案 1 :(得分:0)

我认为你应该看看arrow function并使用类似plot()的东西;等等;

plot();hold on;
for i=1:iter
   arrow(C(old_iter),C(new_iter));
end;
hold off;