一位同事给我传递了一个.fig
文件,该文件在同一图上有很多行,并且根据所属的组对其进行着色。该图如下所示以供参考。
我需要更改图例,以使具有相同颜色的行具有相同的图例条目。问题是我无权访问原始数据,所以我无法使用提到的here方法,有没有办法仅使用.fig
文件来更改图例条目?我尝试在属性检查器中将某些图例名称更改为NaN
,但这只是将条目更改为NaN。
答案 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数据提取到xData
和yData
。颜色信息将保存到单元格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')
结果是右下图,其中每种颜色仅列出一次。