Matlab图例颜色don';不匹配线

Matlab图例颜色don';不匹配线,matlab,graph,plot,matlab-figure,Matlab,Graph,Plot,Matlab Figure,不确定这里出了什么问题。我在下面创建了一个简单的示例: 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 = '

不确定这里出了什么问题。我在下面创建了一个简单的示例:

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
我的系统的结果是:

使用更少的线条,它甚至可以在图例中添加甚至不在绘图上的颜色。发生了什么事

解释发生了什么 问题就在眼前

yvals=0(长度(xvals))+ii

这将创建一个10x10平方矩阵,而不是1x10向量。然后根据
xVAL
绘制该矩阵的每个列。这会导致颜色混合,这可能不是你想要的

具体分析发生了什么是有趣的。Matlab使用不同的颜色绘制该矩阵的每一列,在Matlab R2014b以后的版本中

但是该矩阵的所有列都是相同的,因此每个列都覆盖(覆盖)前一列,并且您只能看到最后一列的颜色

现在,颜色循环有7种颜色,矩阵有10列。因此,在第一次迭代中,最后绘制的列(您看到的列)具有颜色
mod(10,7)==3
(黄色)。在第二次迭代中,您从
3
开始循环使用10种以上的颜色,也就是说,您得到的颜色
mod(3+10,7)==6
(浅蓝色)。等等因此,您在图中看到的颜色取决于循环索引
ii
,但不是您期望的方式

通过按打印顺序拾取每个打印线的颜色(和线等级库)来创建其条目。有
10*6==60
绘制线,每条线对应于矩阵的一列。但是,由于您只向图例提供了六个字符串,因此它只选择这些行的前六行,并使用它们的颜色创建图例条目。这些颜色遵循默认顺序,如上所述

图例中的前六行中没有一行在图中实际出现,因为它们被其他行覆盖。但是
legend
并不关心这一点。因此,您将获得六个具有默认颜色顺序的图例条目,这当然与您在图形中实际看到的线条不匹配

解决方案 从上面可以看出,解决方案很清楚:将引用的行替换为

yvals = zeros(1, length(xvals)) + ii;
yvals
创建为向量(而非矩阵)。这样,您将得到您期望的数字: