如何在MATLAB中仅显示图例

时间:2013-08-08 04:01:12

标签: matlab graph charts latex

我想在MATLAB中仅显示一组数据的图例。

我想这样做的原因是我想将图例导出为.eps,但我只想要图例,而不是图。

有没有办法关闭图并将其从图中删除,但仍然只显示图例居中?

3 个答案:

答案 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');

enter image description here

答案 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的图例会自动灰显这样的隐形图:

Text in legend gray for invisible plots

无论是关闭图例的自动更新还是更改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类型。
  • 生成的图像将包含图例,其框以及周围的一点空间,图例小于最小宽度(请参阅Minimum Width of Figures in MATLAB under Windows)。但是,通常情况并非如此。

以下是使用上述功能的完整示例:

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

Nicely cropped legend with original colors