我需要你的帮助解决我面临的一个小问题。当我想使用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相关)不会出现。
我提前感谢您的帮助。
答案 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}
)。