Matlab 更改地物的图例,使各行共享同一图例条目

Matlab 更改地物的图例,使各行共享同一图例条目,matlab,matlab-figure,Matlab,Matlab Figure,一位同事递给我一个.fig文件,该文件在同一个绘图上有许多行,它们根据所属的组进行着色。下图仅供参考 我需要更改图例,以便具有相同颜色的行具有相同的图例条目。问题是我无法访问原始数据,因此我无法使用上述方法,因此有没有办法仅使用.fig文件更改图例条目?我尝试在property inspector中将一些图例名称更改为NaN,但这只是将条目更改为NaN 如果您有*。图文件,您可以使用“get”方法提取任何包含的数据,如果您了解MATLAB 例如,请参见下面的左图作为*。图文件的示例。您可以通过挖

一位同事递给我一个
.fig
文件,该文件在同一个绘图上有许多行,它们根据所属的组进行着色。下图仅供参考

我需要更改图例,以便具有相同颜色的行具有相同的图例条目。问题是我无法访问原始数据,因此我无法使用上述方法,因此有没有办法仅使用
.fig
文件更改图例条目?我尝试在property inspector中将一些图例名称更改为
NaN
,但这只是将条目更改为NaN


如果您有
*。图
文件,您可以使用“get”方法提取任何包含的数据,如果您了解MATLAB

例如,请参见下面的左图作为
*。图
文件的示例。您可以通过挖掘当前地物对象的子对象来提取其中的数据

% 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')