我有三个向量:状态,位置和索引。每个都有50个元素。我正在尝试为位置与索引生成图形,但仅当状态值为2到5时才会生成。例如,对于数据:
0 13 3
2 24 1
1 18 2
5 71 0
我希望代码只绘制第24和第7行的第二和第四行的点(因为状态在2和5之间)。
非常感谢任何帮助!
答案 0 :(得分:0)
那不是那么糟糕。首先创建一个logical
向量,我们搜索2到5之间的状态。之后,使用此position
向量对index
和logical
向量进行子集化,以提取此信息。假设您的向量被称为state
,position
和index
,您可以这样做:
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
的默认行为是使用直线将所有点连接在一起。因为我不知道数据的性质,所以我选择绘制单点。
作为额外的奖励,这里的代码将绘制position
与index
的关系,并根据每个点所属的状态对点进行颜色编码。换句话说:
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之间对数据进行子集化的逻辑是您问题中解决的最重要的一点,这些是上面显示的代码的前四行。