我一直在努力解决这个问题,如果有人能帮助我,我将不胜感激。我能够生成一个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
答案 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