我正在尝试使用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总是告诉我'索引超过矩阵维度'。同样,如果我通过不使用'legend(list)'手动创建图例,但显式键入图例条目。有谁知道为什么会发生这种情况或如何解决它?谢谢!
答案 0 :(得分:0)
您需要使用来自legend
的号码的其他输出。具体来说,请查看docs中名为icons
的第二个输出。
对于错误,对findobj(...)
的调用产生一个空向量,因此确实超出了矩阵维度。确实(来自文档):
从R2014b开始,图例函数返回一个图例对象。在 以前的版本它返回一个轴对象。
所以也许这就是为什么你不能使用findobj
来获取图例文字...
无论如何这里是如何解决你的问题。在这个例子中,我创建了3个图并更改了图例中第1和第2个条目的文本颜色:
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
输出更改绘图所需的任何属性,使其适合其图例条目。