从图例中删除特定对象

时间:2013-02-13 21:10:22

标签: matlab get annotations bar-chart legend

我需要你的帮助解决我面临的一个小问题。当我想使用bar函数描绘f1和f2时,我需要在图的图例选项卡中排除f2注释对象,但是下面写的设置语法似乎给出了提到的错误。

代码如下:

f1= bar([SN, SN, SN], [Class_Work, Final_Exam, Shift_Grade'-Grade], K, 'stacked');

f2= bar([SN(idx), SN(idx), SN(idx)], [Class_Work(idx), Final_Exam(idx), SG(idx)-Grade(idx)], K*dy/dx, 'stacked', 'LineWidth', 2.5);  

set(f1,{'DisplayName'},{'Mid-Term','Final-Exam','Shift'}')
legend('location','NorthEast','Orientation','horizontal'); 

% in order to Exclude f2 indices from legend: (BUT SEEMS NOT WORKING based on error!)
set(get(get(f2,'Annotation'),'LegendInformation'),...
    'IconDisplayStyle','off');

运行后,它会在命令窗口中显示此错误,包括正确的数字,但包含所有注释对象:

???使用==>时出错获得

无法从单元格转换为双精度。

==>中的错误集(获得(获得(F2, '注释'), 'LegendInformation'),...

图中我需要的是:绘制f2时,图例标签中的 data4,data5和data6 图形对象(与f2相关)不会出现。

我提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

有一种特殊的语法可以调用图例,这对你的情况有帮助。来自Matlab文档:

 legend(h, 'string1', 'string2', ...);
  

在图上显示一个图例,其中包含由向量h中的句柄标识的对象,并使用指定的字符串标记相应的图形对象(线条,条形图等)。

所以,在你的情况下,你应该这样做:

 legend(f1, 'Mid-Term', 'Final-Exam', 'Shift');

然后相应地修改图例的其他属性(位置,方向等)。

<强>更新

或者,要使初始代码正常工作,您应该:

 annots = get(h,'Annotation');
 for i=1:length(annots)
     set(get(annots{i},'LegendInformation'),'IconDisplayStyle','off');
 end

annots = get(h,'Annotation')返回单元格数组,然后您只需操作此数组的每个单元格(即annots{i})。