0

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

代码如下:

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');

运行后,它会在命令窗口中出现此错误,包括正确的图形,但包含所有注释对象:

???使用 ==> 获取错误

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

==> set(get(get(f2,'Annotation'),'LegendInformation'),... 中的错误

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

我提前感谢您的帮助。

4

1 回答 1

0

有一种特殊的语法可以调用 legend 对您的情况有所帮助。来自 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}对该数组的每个单元格(即)进行操作。

于 2013-02-14T09:17:17.653 回答