更改图形的图例,以便各行共享同一图例条目

时间:2019-06-05 07:24:31

标签: matlab-figure

一位同事给我传递了一个.fig文件,该文件在同一图上有很多行,并且根据所属的组对其进行着色。该图如下所示以供参考。

我需要更改图例,以使具有相同颜色的行具有相同的图例条目。问题是我无权访问原始数据,所以我无法使用提到的here方法,有没有办法仅使用.fig文件来更改图例条目?我尝试在属性检查器中将某些图例名称更改为NaN,但这只是将条目更改为NaN。

What I have so far

1 个答案:

答案 0 :(得分:0)

如果拥有*.fig文件,并且您已经了解了MATLAB Graphics Objects Hierarchy,则可以使用'get'方法提取任何包含的数据。

例如,请参见下面的左图作为您的*.fig文件的示例。您可以通过浏览当前图形对象的Children来提取其中的数据。

% Open your figure
fig = openfig('your_figure.fig');
% fig = gcf     % If you have the figure already opened
title('loaded figure')

% Get all objects from figure (i.e. legend and axis handle)
Objs = get(fig, 'Children');      
% axis handle is second entry of figure children
HA = Objs(2);          
% get line objects from axis (is fetched in reverse order)
HL = flipud(get(HA, 'Children'));     

% retrieve data from line objects
for i = 1:length(HL)
    xData(i,:) = get(HL(i), 'XData');
    yData(i,:) = get(HL(i), 'YData');
    cData{i} = get(HL(i), 'Color');
end
现在将图中所有行的

xy数据提取到xDatayData。颜色信息将保存到单元格cData中。现在,您可以按自己的方式用图例重新绘制图形(例如,使用已经找到的SO解决方案):

% Draw new figure with data extracted from old figure
figure()
title('figure with reworked legend')
hold on
for i = 1:length(HL)
    h(i) = plot(xData(i,:), yData(i,:), 'Color', cData{i});
end

% Use method of the SO answer you found already to combine equally colored
% line objects to the same color
legend([h(1), h(3)], 'y1', 'y2+3')

结果是右下图,其中每种颜色仅列出一次。

enter image description here