选择特定数组并在MatLab中创建并绘制一个新数组

时间:2013-04-09 13:53:35

标签: arrays matlab plot

我创建了随机线条,我想选择其中一些以便用红色绘制它们,而其余的则用蓝色绘制。

到目前为止,我的代码是

%Initial line values

tracks=input('Give me the number of muon tracks: ');
width=20;
height=5;

Ystart=15.*ones(tracks,1);
Xstart=-80+160.*rand(tracks,1);
Xend=-80+160.*rand(tracks,1);
X=[Xstart';Xend'];
Y=[Ystart';zeros(1,tracks)];
b=(Ystart.*Xend)./(Xend-Xstart);

for i=1:tracks
    if ((Xend(i,1)<width/2 && Xend(i,1)>-width/2)||(b(i,1)<height && b(i,1)>0))
        plot(X(:, i),Y(:, i),'r');%the chosen ones!
        hold all
    else
        plot(X(i),Y(i),'b');%the rest of them
        hold all
    end
end

输出

一个想法是创建新的向量并尝试绘制它们。我尝试的是以下

%Initial line values

tracks=input('Give me the number of muon tracks: ');
width=20;
height=5;

Ystart=15.*ones(tracks,1);
Xstart=-80+160.*rand(tracks,1);
Xend=-80+160.*rand(tracks,1);
X=[Xstart';Xend'];
Y=[Ystart';zeros(1,tracks)];
b=(Ystart.*Xend)./(Xend-Xstart);

countHot=0;
countCold=0;

for i=1:tracks
    if ((Xend(i,1)<width/2 && Xend(i,1)>-width/2)||(b(i,1)<height && b(i,1)>0))
        countHot=countHot+1;
   else
        countCold=countCold+1;
   end
end

Xhot=zeros(countHot,1);
Yhot=zeros(countHot,1);
Xcold=zeros(countCold,1);
Ycold=zeros(countCold,1);

for i=1:tracks
    if ((Xend(i,1)<width/2 && Xend(i,1)>-width/2)||(b(i,1)<height && b(i,1)>0))
        Xhotend(i)=Xend(i);
        Xhotstart(i)=Xstart(i);
        Yhotend(i)=Yend(i);
        Yhotstart(i)=Ystart(i);
     else
        Xcoldend (i)=Xend(i);
        Xcoldstart(i)=Xstart(i);
     end
end

事情是它似乎没有起作用。任何想法或建议都非常受欢迎!

1 个答案:

答案 0 :(得分:1)

您的第一个代码几乎是正确的,您只需要绘制XY中的列,而不仅仅是单个点:

%Initial line values

tracks=input('Give me the number of muon tracks: ');
width=20;
height=5;

Ystart=15.*ones(tracks,1);
Xstart=-80+160.*rand(tracks,1);
Xend=-80+160.*rand(tracks,1);
X=[Xstart';Xend'];
Y=[Ystart';zeros(1,tracks)];
b=(Ystart.*Xend)./(Xend-Xstart);

for i=1:tracks
    if ((Xend(i,1)<width/2 && Xend(i,1)>-width/2)||(b(i,1)<height && b(i,1)>0))
        plot(X(:, i),Y(:, i),'r');%the chosen ones!
        hold all
    else
        plot(X(:,i),Y(:,i),'b');%the rest of them
        hold all
    end
end

X(i)将绘制X中的单个元素,请参阅Matlab's linear indexing以了解原因。 X(:, i)使用subscript indexing和冒号运算符:表示此情况下的所有行。