【问题标题】:Matlab surface plot save as true vector graficMatlab 曲面图另存为真矢量图形
【发布时间】:2019-11-16 20:27:00
【问题描述】:

目标:

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

示例:

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

问题:

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

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

问题:

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

【问题讨论】:

    标签: matlab plot vector-graphics surface


    【解决方案1】:

    您应该将图形的'Renderer'属性设置为'painters'

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

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

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

    这将产生真正的矢量图形。但是,我建议将您的数字导出为 pdf,因为我相信乳胶无论如何都会将 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      相关资源
      最近更新 更多