绘制来自另一种颜色的矩阵的序列中的特定值

时间:2016-09-15 23:06:12

标签: arrays matlab matlab-figure

我正在密谋我的matrix <1x10000>,其中包含以下值:

30, 30, 30, 60, 60, 60, 25, 25, 25, 25, 70, 70, 70, 10, 10, 10 and so on...

这给了我一条水平线。现在我想选择另一种颜色,或者添加一个标签,或者在为60, 25, 70值绘制线条的地方找到方便的东西(它们有多少并不重要,但它们必须按顺序排列)。

实施例

我们有一个从矩阵绘制的图表。矩阵由以下值组成:

myMatrix = [30, 30, 30, 60, 60, 60, 25, 25, 25, 25, 70, 70, 70, 10, 10, 10]

这会给出一条蓝线plot(myMatrix, 'b') 现在我想将60,25,70的整个序列绘制成另一种颜色,或者使用某种标签显示:&#34;这里是60, 25, 70的序列。因此,30, 30, 30为蓝色,60, 60, 60, 25, 25, 25, 25, 70, 70, 70为另一种颜色,或者在该行旁边有标签,然后10, 10, 10为蓝色。

重要的是要指出,值必须以精确的顺​​序/副本出现,换句话说,60, 25, 70适用于:

60, 60, 60, 25, 25, 70, 70, 70

60, 60, 60, 80, 70, 70

不会用蓝色以外的其他颜色着色。

道歉,如果解释是&#34;有点怎么样!&#34;。在Matlab中完全是新的。

1 个答案:

答案 0 :(得分:1)

以下是查找和绘图的代码:

myMatrix = [30, 30, 30, 60, 60, 60, 25, 25, 25, 25, 70, 70, 70, 10, 10, 10];
d = diff([myMatrix(1) myMatrix]); % find all switches between diferent elements
len = 1:numel(myMatrix); % make a list of all indices in myMatrix
idx = [len(d~=0)-1 numel(myMatrix)]; % the index of the end each group
counts = [idx(1) diff(idx)]; % the number of elements in the group
elements = myMatrix(idx); % the type of element
n_groups = numel(idx); % the no. of groups in the vector

values = [60 25 70];
mask = zeros(1,numel(myMatrix));
for k = 1:n_groups-numel(values)+1
    if isequal(values,elements(k:k+numel(values)-1))
        if k>1
            mask(idx(k-1)+1:idx(k+numel(values)-1)) = 1;
        else
            mask(1:idx(k+numel(values)-1)) = 1;
        end
    end
end
imagesc(mask)
colormap([0 0 1;0 1 0])
axis image
axis off

给出:

plot_vector

和for:

myMatrix = [1 2 3 2 1 2 1 2 3 2 1 3 2 3 2 1 2 3 2 1 2 3 2 1 2 3];
values = [1 2 3];

我们得到:

123_vec