Matlab 曲面图另存为真实矢量图形

Matlab surface plot save as true vector grafic

目标:

我正在尝试将 Matlab 曲面图导出为 .eps 矢量图形文件并将其包含在 LaTex 文档中。在同一个 LaTex 文档中使用它们将普通图导出为 .eps 效果非常好,并且在使用 Adob​​e Reader.

编译查看文档后它们显然仍然是矢量图形

示例:

命令 peaks 可用于创建如下所示的曲面图(导出为 .png。是的,与导出为 [=10= 相比,这严重导致压缩伪影明显减少] 文件 ).

问题:

如果我将上面的示例图导出为 .eps 文件,编译我的 LaTex 文档,然后使用 Adob​​e Reader 查看它,该图显示丑陋的像素图形,如压缩伪像,请参阅下面的屏幕截图(在 Adob​​e Reader 中放大)。 这个问题实际上非常严重,即使不放大我的 4K 屏幕,压缩伪影也很明显。

我怀疑 Matlab 将图像嵌入到 .eps 文件中(如果可能的话)。 将图形导出为 .svg 会生成具有较少压缩伪影的像素图形(它也绝对不是矢量图形)。

问题:

如何强制 Matlab 将曲面图导出为真正的矢量图形?

你应该把图的'Renderer' 属性设为'painters':

peaks
set(gcf, 'Renderer', 'painters')
print(gcf, '-depsc', 'test.eps')

或直接将其作为输入参数提供给打印:

print(gcf, '-depsc', 'test.eps', '-painters')

这将生成真正的矢量图形。但是,我建议将图形导出为 pdf,因为我相信 latex 无论如何都会将 eps 转换为 pdf。

如果您使用 -dpdf 驱动程序调用 print,Matlab 会将图形打印在一张大纸上。要将纸张裁剪为您的图形大小,您可以使用以下功能:

function saveFigPdf(fig, filename, figsize, resolution)
% saveFigPdf(fig, filename, figsize, resolution)
% figsize = [width height]

    if ~exist('figsize', 'var') || isempty(figsize)
        figsize = [8, 5];
    end

    if ~exist('resolution', 'var') || isempty(resolution)
        resolution = '-r300';
    end

    % set paper settings
    fig.PaperUnits = 'centimeters';
    fig.PaperPositionMode = 'manual';
    fig.PaperSize = figsize;
    fig.PaperPosition = [0, 0, figsize(1), figsize(2)];
    fig.Renderer = 'painters';

    % print to pdf
    print(fig, '-dpdf', filename, resolution);
end