2014-01-26 29 views
0

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

谢谢! 大卫 [email protected]

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 

回答

0

你可以做到这一点很容易考虑到plot(A),其中A是一个矩阵,绘制了矩阵VS其索引的列,而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

+0

感谢路易斯,哇这个情节(bsxfun .....)看起来如此复杂,我从来没有见过这样的事情。你能解释一下这个过程,以及“set ticks”命令的作用吗?我试图找出的另一件事是,如果你看看我上面发布的代码,在for循环中,我试图做的是有一个10×10(或更多的单元格)的网格,每个单元格的长度为200并绘制该单元中间的“星”来代表风力涡轮机的位置。是否有修改你的绘图代码,所以它绘制在每个“明星”感谢200×200单元的中间 – Sharkbait

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, '*'); 

还是真的cheaty方式:

spy(v); 
+0

+1的'间谍(v)'的解决方案! –

+0

matlab在“x = x * xscale + xoffset;”中说错误线。 – Sharkbait

+0

@Sharkbait是错误的任何机会“这些变数名称,一些人拔出空气说明一个点没有定义”?它们只是标量值的占位符 - 例如'xscale = 200','xoffset = 100'等。 – Notlikethat