不确定这里出了什么问题。我在下面创建了一个最小的例子:
clear
steps = 1:6;
labels = cell(length(steps),1);
xvals = 1:10;
fig = figure(1);
ax = axes('parent',fig);
hold on
for ii=1:length(steps)
s=steps(ii);
yvals = zeros(length(xvals)) + ii;
labels{ii} = ['gain = ' num2str(s)];
plot(ax,xvals,yvals);
end
legend(ax, labels);
hold off
我系统的结果是:
如果线条较少,它甚至可以在图例中添加颜色甚至不在图上。发生了什么事??
答案 0 :(得分:3)
问题出在
行
yvals = zeros(length(xvals)) + ii;
这会创建一个10x10平方矩阵,而不是1x10向量。然后plot
将该矩阵的每个列与xvals
对比。这会导致颜色混合,这可能不是你想要的。
分析具体发生的事情很有意思。 Matlab使用default cycle of colors绘制具有不同颜色的矩阵的每一列,在Matlab R2014b之后是
但是该矩阵的所有列都是相同的,因此每个列覆盖(覆盖)前一个列,并且您只能看到最后颜色。
现在,色彩循环有7种颜色,矩阵有10列。因此,在第一次迭代中,最后一个绘制的列(您看到的那个)具有颜色mod(10,7)==3
(黄色)。在第二次迭代中,您将从3
开始再循环10种颜色,即获得颜色mod(3+10,7)==6
(浅蓝色)。等等。因此,您在图中看到的颜色取决于循环索引ii
,但不是您预期的方式。
legend
通过选择每条绘制线的颜色(和线条规格)按照绘制顺序创建条目。有10*6==60
个绘制的线,每个线对应一个矩阵的列。但是因为你只向legend
提供了六个字符串,所以它只选择那些行的前六个,并使用它们的颜色来创建图例条目。这些颜色遵循默认顺序,如上所述。
图中实际显示的是前六行中没有任何一行,因为它们被其他线覆盖。但legend
并不关心这一点。因此,您将获得具有默认颜色顺序的六个图例条目,这当然与您在图表中实际看到的线条不匹配。
从上面可以看出,解决方案很明确:用
代替了引用的行yvals = zeros(1, length(xvals)) + ii;
将yvals
创建为向量(不是矩阵)。这样你就可以得到你想要的数字: