我正在密谋我的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中完全是新的。
答案 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
给出:
和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];
我们得到: