访问图例条目超出矩阵维度

Accessing legend entries exceeds matrix dimensions

我正在尝试使用 Matlab R2015a 绘制一些数据,并且随着数据集针对不同的绘图而变化,我想自动(半)创建图例。我用一个字符串列表(称为列表)然后

leg = legend(list);
legtxt=findobj(leg,'type','text');
set(legtxt(1),'color','r');
set(legtxt(2),'color','b');

a.s.o。根据条目。

但是,无论我在 'set(legtxt(i))' 部分给出什么索引,Matlab 总是告诉我 'Index exceeds matrix dimensions.' 同样,如果我不使用 'legend(list)' 而是明确地手动创建图例输入图例条目。有谁知道为什么会发生这种情况或如何解决?谢谢!

您需要使用对 legend 调用的额外输出。具体来说,检查 docs.

中名为 icons 的第二个输出

至于错误,对findobj(...)的调用产生了一个空向量,因此确实超出了矩阵维度。确实(来自文档):

Starting in R2014b, the legend function returns a legend object. In previous releases it returns an axes object.

所以也许这就是为什么你不能使用 findobj 来获取图例文本...

总之,这是解决您问题的方法。在此示例中,我创建了 3 个图并更改了图例中第一个和第二个条目的文本颜色:

x = 1:10;
y1 = sin(x);
y2 = cos(x);
y3 = x;

plot(x,y1,'y*',x,y2,'g--',x,y3,'k')

list = {'y1';'y2';'y3'};

%// You want to play with icons and possibly plots.
[leg,icons,plots,str] = legend(list)

set(icons(1),'color','r','FontSize',12)
set(icons(2),'color','b','FontSize',12)

输出:

当然,您可以使用 plots 输出来更改任何 属性 您想要的图,使它们适合图例条目。