2

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

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

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

4

3 回答 3

3

这似乎可以解决问题:

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 的边界框。

于 2013-08-08T05:44:19.630 回答
3

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如果有的话,则不是类型。
  • 生成的图像将包含图例、它的框和它周围的一点空间,图例小于最小宽度(请参阅Windows 下的 MATLAB中图形的最小宽度)。但是,通常情况并非如此。

这是使用上述函数的完整示例:

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

带有原始颜色的精美裁剪图例

于 2017-08-16T21:23:29.560 回答
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');

在此处输入图像描述

于 2013-08-08T05:35:07.213 回答