【问题标题】:Matlab figure -> Word -> PDF results in bad qualityMatlab图-> Word-> PDF导致质量不好
【发布时间】:2013-09-16 15:29:34
【问题描述】:

我用 matlab 创建了一些图形,并使用“编辑 -> 复制图形”并设置“保留信息(如果可能的话,元文件)”将它们导出。我在 Word 2010 中导入它。但是,如果我将 word 文档转换为“另存为 pdf”,则数字会有伪影。

下图给你一个印象。左边是放大 400% 的 Word,右边是放大 400% 的 pdf。可以清楚地看到虚线变成直线等。如何避免这种情况?

【问题讨论】:

  • 当您说“将其导入 Word 2010”时 - 您是否进行了复制/粘贴操作?还是您将图像保存到磁盘?通常,当您通过磁盘上的文件进行操作时,您会获得更好的结果。微软以打破自己的规则而闻名。
  • 其实我现在正在做复制粘贴

标签: matlab plot ms-word figure


【解决方案1】:

扩展 am304 给出的答案 - 我刚刚测试了以下内容:

figure
% create a plot with some fine detail:
plot(sin(1./linspace(0.02, 1, 1000)));
% set the "paper size" of the figure (not the size on screen) to 30x20 cm:
set(gcf, 'PaperUnits', 'centimeters', 'PaperPosition', [0 0 30 20]);
% "print" to png with a resolution of 300 dpi
print('-dpng', 'myplot.png', '-r300');

这会导致将以下图片保存到磁盘(裁剪以仅显示细节):

全尺寸图片只有 43 kB - 但它是一个非常高分辨率 (300 dpi) 的渲染,因此您可以看到情节的细节。

我可以将此图片插入 Word 文档并将其保存为 pdf。然后,当我截取 pdf 的屏幕截图时,它看起来像这样:

如您所见 - 几乎所有细节都在那里。

【讨论】:

    【解决方案2】:

    您可以使用print 函数将您的图形导出为各种格式。 EPS 或 TIFF 应该会产生良好的结果。如果您想要高质量的图形,我不会使用“编辑 -> 复制图形”。

    【讨论】:

    • 我可以很好地保存数字,这不是问题。但后来我无法将它们导入 Word,因为它们太“大”或太“小”。我需要一个命令,以适当的大小准确保存高质量的数字
    • 您可以使用print 将要保存的图形的大小控制为您想要的任何大小。例如,请参阅print 函数的文档页面中的“以屏幕大小打印图形”。
    • 绝对好建议不要使用复制/粘贴。我已经扩展了您的解决方案,显示了可能采取的确切步骤。顶一下帽子,给你一个赞成票……
    【解决方案3】:

    我在这里使用 cmets 来创建自己的方法(也借助:How to set the plot in matlab to a specific size?)。所以这是我的功能:

    function figureprint(hFig, width, height, res, filename)
    
    %# figure size printed on paper
    set(hFig, 'PaperUnits','centimeters')
    set(hFig, 'PaperSize',[width height])
    set(hFig, 'PaperPosition',[0 0 width height])
    set(hFig, 'PaperOrientation','portrait')
    
    %# export
    print(hFig, '-dpng', res, filename)
    

    此功能将图形打印到以厘米为单位的特定尺寸。例如

     figureprint(hFig, 12, 10, '-r1500', 'testPng.png')
    

    所以“hFig”被保存为一个宽12cm高10cm的*.png。我测量了这个,效果很好。优化当然是可能的。

    如果你使用

    set(gca,'LooseInset', get(gca,'TightInset'))
    

    y 值的乘法因子的指数被截断(当绘制大数字时)(见图)。在这种情况下,您必须修改值,例如像这样:

    tight = get(gca,'TightInset');
    tight(1,4) = 0.08;
    set(gca,'LooseInset',tight)
    

    【讨论】:

      猜你喜欢
      • 2019-07-11
      • 2021-05-11
      • 2020-11-11
      • 1970-01-01
      • 2021-07-26
      • 2017-01-15
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多