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