Если у вас есть файл *.fig
, вы можете извлечь любые включенные данные с помощью метода 'get', если вы поняли иерархию MATLAB Графических объектов .
Например, смотрите левый график ниже как пример вашего *.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')
Результат - график внизу справа, где каждый цвет указан только один раз.