Matlab多列图例&次要情节

时间:2014-02-28 17:09:17

标签: matlab legend subplot

我有一个包含7个条目的图例,其中一些在一个子图上,一些在另一个子图上,有些在两个图中都是通用的。我已经设法使用我在网上找到的一些帮助将所有这些条目集成到一个图例中,这很棒。

我现在唯一的问题是每个条目的字符串都很长,所以理想情况下我需要它们在2列中,第7个条目位于图例底部中间的中间位置。我找到了做多列圆形图例的各种选项:

但我无法弄清楚如何将它们与我已经研究过如何做传奇的方式结合起来。

这是我到目前为止的MWE:

xdata=1:1:10;
ydata=0:0.1:0.9;
% Line colours
cm=[32 114 214;145 205 237;0 129 63;247 217 9;255 127 0;184 18 21];
cm=cm/255;   
h1=subplot(2,1,1);
l1=line(xdata,ydata,'Color',cm(1,:));
l2=line(xdata,ydata,'Color',cm(2,:));
l3=line(xdata,ydata,'Color',cm(3,:));
l5=line(xdata,ydata,'Color',cm(5,:));
l7=line(xdata,ydata,'Color','k','LineStyle','--');
h2=subplot(2,1,2);
l4=line(xdata,ydata,'Color',cm(4,:));
l6=line(xdata,ydata,'Color',cm(6,:));
line(xdata,ydata,'Color','k','LineStyle','--');
hL=legend(h2,[l1,l2,l3,l4,l5,l6,l7],{'Second/Multi-year La Niña','First/Single-year La    Niña','Neutral ENSO years','First/Single-year El Niño','El Niño years','Second/Multi-year El Niño','All Years (1901-2011)'},'Location','SouthOutside','Orientation','horizontal');
set(hL,'Units','centimeters');
Lpos=get(hL,'Position');
Lpos(1)=0;
Lpos(2)=0;
set(hL,'Position',Lpos);

我的实际数据不重叠,因此您可以看到所有行。对于这个例子来说,这样做更容易。

任何人都可以帮我解决传奇所需的布局吗?很可能我可以使用我已经找到的3个选项中的一个,但我真的不明白它们做得多好以适应我的情况。

1 个答案:

答案 0 :(得分:1)

我找到了另一个解决方法,即创建3个单独的图例,然后将它们放在我想要的位置。我创建了一个第三个子图,它具有'Visible','off'设置,并使用以下代码调用我的三个图例:

lg1=legend(h1,[l1,l2,l3],{'a','b','c'});
lg2=legend(h2,[l4,l5,l6],{'d','e','f'});
lg3=legend(h3,l7,{'g'});

其中h1-3是子图,l1-7是7行,a-g是图例文本。然后,我使用get(lg1,'Position')重新排列它们,更改位置向量,并使用set(lg1,'Position',...)重置它(用位置向量替换...)。我在三个传说周围关掉了盒子,但是计划在边缘放一个盒子,所以它看起来像是一个传奇。

这不是最漂亮的方式,但它适用于我需要做的事情。