0

因此,如果我运行我的代码,我应该得到两个图的图例,但我只得到一个图例。有人可以给出一个解决方案。我希望两个图都在一个图中,但单独的图例命令不起作用。代码如下:

close all;clear all;clc

load stiffhless

figure
plot(FI*180/pi,ktot);
xlabel('\psi [deg]');ylabel('k');
title('Stiffness coeff. of flapping motion eq.')
xlim([0,360])
set(gca,'XTick',0:45:360) 
grid on
legendCell=strcat('\mu=',strtrim(cellstr(num2str(mu_vect'))));
legend(legendCell)
hold on

load stiffarti
plot(FI*180/pi,ktot,'--');
xlabel('\psi [deg]');ylabel('k');
title('Stiffness coeff. of flapping motion eq.')
xlim([0,360])
set(gca,'XTick',0:45:360) 
grid on
legendCell=strcat('\mu=',strtrim(cellstr(num2str(mu_vect'))));
legend(legendCell)
4

1 回答 1

1

根据@dfri 的评论,如果您可以为您遇到的问题提供一个最小、完整且可验证的示例,我们最容易为您提供帮助(这样做,您甚至可以自己解决问题!)。

当看似无辜的命令未按您预期的方式运行时,仔细阅读相关的 MATLAB 文档(图例)也是一个很好的起点。

除了这些评论,这里有两种可能的方法来包含多个图例条目:


如果您想一次添加所有图例条目,我相信这是您问题的最小版本:

x=1:10; y=rand(1,10);
figure; plot(x,y);
legendCell='foo';
legend(legendCell);
hold on;
plot(x,-y);
legendCell='bar';
legend(legendCell);

如果是这样,第二次调用将legend覆盖第一次调用。在这种情况下,@dfri 的评论是完全正确的——这就是你的意思:

figure; plot(x,y);
legendCell1='foo';
hold on;
plot(x,-y);
legendCell2='bar';
legend(legendCell1,legendCell2);

甚至更好,不需要legendCell1/2变量:

legend('foo','bar');

只有最后一个图例条目 两个图例条目


如果您需要一次添加一个图例条目,这是一种方法:

figure; plot(x,y);
L=legend('foo');

hold on;
plot(x,-y);
L=legend(L.String,'bar');

plot(x,2*y);
L=legend(L.String,'boo');

plot(x,-2*y);
L=legend(L.String,'far');

...

为图例对象分配一个变量名称L可以让您获得所有现有图例字符串的列表L.String。因此,通过再次调用L=legend(...),您基本上可以将元素添加到现有列表中。

于 2016-02-27T14:58:57.517 回答