我想在MATLAB中仅显示一组数据的图例。
我想这样做的原因是我想将图例导出为.eps,但我只想要图例,而不是图。
有没有办法关闭图并将其从图中删除,但仍然只显示图例居中?
答案 0 :(得分:2)
我认为你需要在你的情节中“隐藏”你不想要的元素,只留下传说。例如,
clear all; close all;
figure;
p1 = plot([1:10], [1:10], '+-');
hold on;
p2 = plot([1:10], [1:10]+2, 'o--');
legend('text1', 'text2');
set(p1, 'visible', 'off');
set(p2, 'visible', 'off');
set(gca, 'visible', 'off');
答案 1 :(得分:2)
这似乎可以解决问题:
plot(0,0,'k',0,0,'.r') %make dummy plot with the right linestyle
axis([10,11,10,11]) %move dummy points out of view
legend('black line','red dot')
axis off %hide axis
传说周围可能有很多空白。您可以尝试手动调整图例大小,或保存图并使用其他程序设置eps的边界框。
答案 2 :(得分:2)
Marcin选择的解决方案不再适用于R2016b,因为MATLAB的图例会自动灰显这样的隐形图:
无论是关闭图例的自动更新还是更改TextColor
属性都不会修复此问题。要看到这一点,请尝试Marcin的修改示例:
clear all; close all;
figHandle = figure;
p1 = plot([1:10], [1:10], '+-');
hold on;
p2 = plot([1:10], [1:10]+2, 'o--');
legHandle = legend('text1', 'text2');
%turn off auto update
set(figHandle,'defaultLegendAutoUpdate','off');
set(p1, 'visible', 'off');
set(p2, 'visible', 'off');
set(gca, 'visible', 'off');
%set legend text color to black
legHandle.TextColor = [0 0 0];
结果保持不变。 (为了避免让我的笔记本电脑穿过窗户)并在没有缩放的情况下解决这个问题,这可能会留下情节片段,我写了一个修复图例的函数并将其保存到文件中(带框架):
function saveLegendToImage(figHandle, legHandle, ...
fileName, fileType)
%make all contents in figure invisible
allLineHandles = findall(figHandle, 'type', 'line');
for i = 1:length(allLineHandles)
allLineHandles(i).XData = NaN; %ignore warnings
end
%make axes invisible
axis off
%move legend to lower left corner of figure window
legHandle.Units = 'pixels';
boxLineWidth = legHandle.LineWidth;
%save isn't accurate and would swallow part of the box without factors
legHandle.Position = [6 * boxLineWidth, 6 * boxLineWidth, ...
legHandle.Position(3), legHandle.Position(4)];
legLocPixels = legHandle.Position;
%make figure window fit legend
figHandle.Units = 'pixels';
figHandle.InnerPosition = [1, 1, legLocPixels(3) + 12 * boxLineWidth, ...
legLocPixels(4) + 12 * boxLineWidth];
%save legend
saveas(figHandle, [fileName, '.', fileType], fileType);
end
使用提示:
fileType
是一个字符串,用于指定saveas()
的有效参数,例如' tif'。XData
成员并非空。line
类型。以下是使用上述功能的完整示例:
clear all; close all;
fig = figure;
p1 = plot([1:10], [1:10], '+-');
hold on;
p2 = plot([1:10], [1:10]+2, 'o--');
legendHandle = legend('myPrettyGraph', 'evenMoreGraphs');
saveLegendToImage(fig, legendHandle, 'testImage', 'tif');