MATLAB:使用条件调整向量的大小

时间:2014-07-07 01:05:43

标签: matlab vector

我有三个向量:状态,位置和索引。每个都有50个元素。我正在尝试为位置与索引生成图形,但仅当状态值为2到5时才会生成。例如,对于数据:

0 13 3

2 24 1

1 18 2

5 71 0

我希望代码只绘制第24和第7行的第二和第四行的点(因为状态在2和5之间)。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

那不是那么糟糕。首先创建一个logical向量,我们搜索2到5之间的状态。之后,使用此position向量对indexlogical向量进行子集化,以提取此信息。假设您的向量被称为statepositionindex,您可以这样做:

loc = state >= 2 & state <= 5;
stateFinal = state(loc);
positionFinal = position(loc);
indexFinal = index(loc);

figure;
plot(indexFinal, positionFinal, 'b.', 'MarkerSize', 14);
xlabel('Index');
ylabel('Position');

此处,index位于x轴上,而position位于y轴上,符合帖子的要求。我还选择使用单个点和蓝色绘制每个点,因此'b.'的第三个变量的plot参数。我还将每个点的大小增加到14,以使点清晰可见。 plot的默认行为是使用直线将所有点连接在一起。因为我不知道数据的性质,所以我选择绘制单点。


作为额外的奖励,这里的代码将绘制positionindex的关系,并根据每个点所属的状态对点进行颜色编码。换句话说:

colours = 'rgbk';
figure;
hold on;
for idx = 2 : 5
    stt = stateFinal == idx;
    pos = positionFinal(stt);
    ind = indexFinal(stt);
    plot(ind, pos, [colours(idx-1) '.'], 'MarkerSize', 14);
end
xlabel('Index');
ylabel('Position');
legend('State 2', 'State 3', 'State 4', 'State 5');

此处状态#2的颜色编码为红色,#3为绿色,#4为蓝色,#5为黑色。如果你感到困惑,我也会投入一个传奇。


如果这不符合您的意图,请在此帖子上留言给我。但是,根据索引是否在2到5之间对数据进行子集化的逻辑是您问题中解决的最重要的一点,这些是上面显示的代码的前四行。