从现有绘图中提取MATLAB图例字符串

时间:2016-01-18 12:52:28

标签: matlab matlab-figure

我一直试图从以前创建的情节中获取一些数据,但我一直在努力与传说。我正在使用MATLAB 2014b。

如果我之前使用以下方式设置我的情节:

h.fig   = figure();
h.ax    = axes(); hold all;
h.line1 = plot(0:0.01:2*pi(), sin(0:0.01:2*pi()));
h.line2 = plot(0:0.01:2*pi(), cos(0:0.01:2*pi()));
h.xlab  = xlabel('X');
h.ylab  = ylabel('Y');
h.leg   = legend('sin(x)', 'cos(x)');

然后,在没有h可用的情况下,我仍然可以将x和y轴标签检索为字符串:

xlab = get(get(gca, 'xlabel'), 'string');
ylab = get(get(gca, 'ylabel'), 'string');

但是,我似乎无法以类似的方式从图例中提取文本。我注意到了:

fig_children = get(gcf, 'children');

将轴和图例都显示为图中的子项,但我似乎无法以与轴相同的方式访问它们:

ax = get(gca);

我可能误解了一些关于它的工作原理的明显方法,但是我找不到一种方法来从以前制作的传奇中获取字符串?

2 个答案:

答案 0 :(得分:4)

图例文本与该行相关联,而不是与图例对象相关联,因此:

ax_children = get(gca, 'children');

输出我正在绘制的线的线阵列:

ax_children = 

  2x1 Line array:

  Line    (cos(x))
  Line    (sin(x))

然后:

leg_strings = get(ax_children, 'displayname');

输出一个单元格数组:

leg_strings = 

    'cos(x)'
    'sin(x)'

这就是我要找的。

答案 1 :(得分:2)

要获取图例句柄(假设图中只有一个存在,否则您必须将它们排序),您可以使用以下内容:

findobj(gcf,'type','Legend')

ans = 

  Legend (sin(x), cos(x)) with properties:

         String: {'sin(x)'  'cos(x)'}
       Location: 'northeast'
    Orientation: 'vertical'
       FontSize: 9
       Position: [0.7226 0.8325 0.1589 0.0619]
          Units: 'normalized'

然后,图例条目可用作单元格数组。

简而言之:

leg_strings = get(findobj(gcf,'type','Legend'),'String');