如何将矩阵映射到坐标并绘制它

时间:2014-01-26 21:08:48

标签: matlab vector matrix

我一直在努力解决这个问题,如果有人能帮助我,我将不胜感激。我能够生成一个10乘10的矩阵,并在矩阵中随机分配“1”。我的目标是在矢量中每个元素的位置绘制一个“星”,其值为“1”,但我似乎无法弄清楚如何将矢量映射到x-y坐标系。我在下面写的代码生成了每个单元格中100颗星的图,并且还生成了一个矢量“v”,但我不知道如何将绘图链接到矢量而不是在我的绘图中有100个“星”但是,我有很多,在元素的相应位置有一个值“1”。

谢谢! 大卫 davidtongg@gmail.com

close all
clear all
clc

a=10;b=10;
v = zeros(a,b);
xy = int32(randi(a, 100, 2));
z = randi(1, 100, 1); % 100 values.

indexes = sub2ind([a, b], xy(:,1), xy(:,2))
v(indexes) = z

m=length(v);
ctr=0;
for i=1:m^2
    x_cor(i)=(i-(floor(i/m)*m))*200-100;
    y_cor(i)=(floor(i/m)+1)*200-100;
    for j=1:m
        if i==j*m
            x_cor(i)=((i-(floor(i/m)*m))*200-100)+(2*m*100);
            y_cor(i)=(floor(i/m))*200-100;
        end
    end

end


figure(1)

plot(x_cor,y_cor,'*');

grid on

2 个答案:

答案 0 :(得分:1)

我当然可能误解了这一点,因为该代码容易混淆,但这就是我认为你所追求的。

对于随机数为1的a x b矩阵:

v = randi([0 1], a, b);

或者对于特定数量的n个,在随机位置:

v = zeros(a, b);
idx = randi([1 numel(v)], n, 1);
v(idx) = 1; % linear indexing into a matrix

然后用任意缩放的坐标绘制它们:

[y x] = find(v);
x = x * xscale + xoffset;
y = y * yscale + yoffset;
plot(x, y, '*');

或者非常讨厌的方式:

spy(v);

答案 1 :(得分:0)

您可以轻松地考虑plot(A),其中A是矩阵,绘制矩阵的列与其索引,并且未绘制NaN s:

v =[ 1     0     0     0
     1     1     0     0
     0     0     0     1
     1     1     1     1
     0     1     1     0 ]; %// example data

v2 = double(v); %// create copy; will be overwritten
v2(~v2) = NaN; %// change zeros to NaNs
plot(bsxfun(@plus, fliplr(v2.'), 0:size(v,1)-1) ,'b*')
%'// transpose and flip from left to right.
%//  Add 1 incrementally to each column to have all of them "stacked" in the plot
axis([0 size(v,2)+1 0 size(v,1)+1]) %// set axis limits
set(gca,'xtick',1:size(v,2),'ytick',1:size(v,1)) %// set ticks
grid

enter image description here