Matlab 将图例添加到一组线中

Matlab 将图例添加到一组线中,matlab,plot,Matlab,Plot,我必须绘制一组线条(总共10条,分为2组,每组5条),但我只想为这些组绘制图例 这似乎很容易,我在这里遵循了公认的答案: 这对我来说很有意义,但当我执行它时,我会得到一个错误: | |和&&运算符的操作数 必须可转换为逻辑标量值。 图例中的错误(第198行) elseif narg>0&& ~ischar(varargin{1})和& 这是代码,我不知道是否是因为“eval”命令,但我得到了绘图 figure(3) h1=plot(res(:,17),(res(:,16)./10^6),prop

我必须绘制一组线条(总共10条,分为2组,每组5条),但我只想为这些组绘制图例

这似乎很容易,我在这里遵循了公认的答案:

这对我来说很有意义,但当我执行它时,我会得到一个错误:

| |和&&运算符的操作数 必须可转换为逻辑标量值。 图例中的错误(第198行) elseif narg>0&& ~ischar(varargin{1})和&

这是代码,我不知道是否是因为“eval”命令,但我得到了绘图

figure(3)
h1=plot(res(:,17),(res(:,16)./10^6),prop,...
res(:,64),(res(:,92)./10^6),prop,...
res(:,65),(res(:,93)./10^6),prop,...
res(:,66),(res(:,94)./10^6),prop,...
res(:,67),(res(:,95)./10^6),prop,...
'linewidth',2);
hold on
for ii=1:ngrains
      eval(['h2(',num2str(ii),',1)=plot(',names{ii},'.VMSTRAIN,',names{ii},'.VMSTRESS,prop2,''linewidth'',2)']);
hold on

下面是我用来添加图例的代码:

   legend([h1 h2],{'label1', 'label2'});

似乎是您的
h2
列向量,您正试图与
h1
连接,就好像它是一个行向量一样


尝试使用
图例([h1;h2],…
图例([h1,h2'],…

无法通过
绘图
功能声明一组
线列
。您可以通过连接值并在它们之间插入
NaN
来“伪造”分组,以断开线:

%// Build some data
t  = transpose(0:0.001:pi);
x1 = sin(t);
x2 = sin(t + pi/6);
y1 = cos(t);
y2 = cos(t + pi/6);

%// Aggregate data for plotting
TX = [ t; NaN;  t];
 X = [x1; NaN; x2];
TY = [ t; NaN;  t];
 Y = [y1; NaN; y2];

%// Do the plotting
plot(   TX, X, '--b',  TY, Y, '-r');
legend('dotted blue',   'full red');
请注意,您不能单独处理
LineSeries
的可见性(或其他属性值),因为“组”中没有实际分离的
LineSeries

以后编辑

如果要使用仅注释组中共享相同样式的第一个
LineSeries
的技巧,可能应该编写:

 legend([h1(1), h2(1)], 'string1', 'string2');

plot
的结果是一个向量,它包含绘制的每一行序列的一个条目。在您的例子中,
h1
5x1
h2
ngrains x1
。您应该做
图例([h1(1)h2(1)],{'label1','label2'});
。这将只为每组的第一行序列分配一个图例条目。

呃,不要像这样使用
eval
。将您的数据存储在一个中并利用。或者使用一个在我写我的文章时没有看到您的文章的。我觉得为选定的行序列创建图例条目比混乱数据要好。不过,这是一个不错的技巧。@Mad物理学家我同意只注释一些具有代表性的
LineSeries
更干净、更灵活。唯一的问题(我个人在通过
.fig
文件交换数据时面临的问题——相信我,这种情况会发生:-D)正在从
LineSeries
属性(如
Color
LineStyle
LineWidth
等)重建组。相比之下,很容易获得整个组的数据,并围绕
NaN
进行拆分。