我该如何在MATLAB中的每次迭代中更改绘图的颜色?

5
以下是我的 MATLAB 代码的一部分。如下所示,我想在一个图中绘制8条曲线。但是,我希望每条曲线都有一个独特的颜色。我还想更改图例,以便它为每个i更改。 例如,对于i = 1,图例将为gho-1,对于i = 2,图例将为gho-2等等。我希望它是自动的,因为有时我会更改i(例如:i = 1:20)。
for i=1:8
.
.
.
plot(b,r,'b');
legend(['qho-',num2str(i)]);    
hold on
end

我可以如何做到这一点?

再次您好,

我有另一个问题: 如果我有以下内容:

for i=1:8
.
b1=(1:3,:)
b2=(3:6,:)
figure(1);plot(b1,r,'*');
figure(2);plot(b2,r,'*');

Leg{i} = ['qho-',num2str(i)];    

end
legend(Leg)

我只得到了最后一个图的颜色图例而没有另一个图的。我该怎么解决?谢谢。

你应该把后续问题作为新问题来询问。 - Dan
2个回答

8
只需使用hold all,而不是hold on,并将图例标签放入一个单元数组中。
hold all
for i=1:8
    .
    .
    .
    plot(b,r);

    Leg{i} = ['qho-',num2str(i)];    

end
legend(Leg)

请看这个问题的例子:Sparse matrix plot matlab
注意: 从Matlab R2014b开始,hold on已被修改为像hold all一样工作,即每次绘制时更改绘图的颜色。文档指出,hold all语法将在未来版本中删除。

1
“hold all”虽然会限制为7种股票颜色,但然后会循环回来。如果您想定义自己的颜色集,可以打开您的图形并使用“set(gca,'ColorOrder',myColors)”命令,其中“myColors”是一个Nx3的RGB值矩阵。 - David K
再次你好,我有另一个问题: 如果我有以下内容for i=1:8 . b1=(1:3,:) b2=(3:6,:) figure(1);plot(b1,r,''); figure(2);plot(b2,r,'');Leg{i} = ['qho-',num2str(i)]; end legend(Leg)我只得到了最后一个图的颜色图例,而不是两个图的... 我该如何解决?!再次感谢 - YSF
1
确保将Leg1{}Leg2{}分开,并在调用figure(2)之前先调用legend(Leg1) - Dan
嗨, 这就是我所做的。但是在第一个图中,我只看到不同的图例和颜色,在另一个图中,我只看到一个图例(例如gho-1)。 - YSF

7
如何尝试以下内容:

比如说:

figure, hold on
N = 8;
h = zeros(N,1);    %# store handle to line graphic objects
clr = lines(N);    %# some colormap
for i=1:N
    %# plot random data
    y = cumsum(randn(100,1));
    h(i) = plot(y, 'Color',clr(i,:));
end
hold off
legend(h, num2str((1:N)','gho-%d'))    %# display legend

plot


那很棒啊,有很多选择 :) :).. 非常感谢 :) - YSF
谢谢!有没有办法在循环中使用subplot来完成这个技巧?每次迭代都会在一个图上绘制2个子图,并为两个子图添加额外的绘图,例如。 - soupault

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接