我只想在 MATLAB 中显示一组数据的图例。
我想这样做的原因是我想将图例导出到 .eps,但我只想要图例,而不是图。
有没有办法关闭图并将它们从图中删除,但仍然只显示居中的图例?
这似乎可以解决问题:
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 的边界框。
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');
我认为你需要在你的情节中“隐藏”你不想要的元素,只留下传说。例如,
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');