在pdf中嵌入用于打印的matlab图:大小

时间:2011-07-05 20:23:15

标签: image matlab latex resize figure

我目前正在matlab中创建我的数据,以便将胶乳嵌入到pdf中以便以后打印。我保存了数字并通过脚本export_fig保存!现在我想知道哪种方式最好:

  • 选择哪个尺寸的matlab图窗口
  • 为脚本选择哪个-m选项?它会改变图像的分辨率和大小......

我想知道关于以下两点的那些要点:

  1. 当选择更大的图形尺寸时,会显示更多的标记,单点标记更清晰可见
  2. 使用小图并使用大-m选项时,我仍然只有一些标记
  3. 当我生成一个非常大的图像(例如分辨率300且仍然是2000 * 2000px)并将其嵌入到文档中时:这看起来难看吗?这将嵌入一个漂亮的缩放模式,还是像将1000 * 1000px图像上传到主页并通过html中的widht和height标签嵌入它一样丑陋 - >浏览器显示它非常难看,因为浏览器没有进行real调整大小。所以它看起来不那么尖锐和难看。
  4. 提前致谢!

1 个答案:

答案 0 :(得分:4)

MATLAB图在内部描述为vector graphics,PDF文件也使用矢量图形描述。将绘图渲染为栅格格式是一个坏主意,因为您最终必须选择分辨率并最终得到更大的文件。

只需将图表保存为EPS格式,即可使用latex将其直接嵌入到PDF文件中。我通常使用以下方法保存我的MATLAB图以供发布:

saveas(gcf, 'plot.eps', 'epsc');

并使用以下方法将它们直接嵌入我的乳胶文件中

\includegraphics[width=0.7\linewidth]{plot.eps}

然后,您只需要选择图像所用线的比例(在本例中为70%)。

编辑:IrfanView和其他人(XnView)不能很好地显示EPS。您可以在Adobe Illustrator中打开它们以更好地预览它的外观。我总是以这种方式插入我的绘图,它们在PDF中看起来与在MATLAB中看起来完全相同。

您还可以通过EPS获得的一个好处是,您可以实际指定字体大小,这样即使您在文档中调整图像大小,文本也是可读的。

关于刻度数,您可以查看MATLAB文档中的axes properties。特别是,无论窗口分辨率是多少,XTickYTick属性都非常有用,可以手动控制出现的滴答数。

编辑(再次):如果您将渲染图像转换为栅格格式(例如PNG),则最好选择与文档中使用的分辨率完全相同的分辨率。渲染大图像(使用大窗口大小)并在PDF中缩小将产生不良结果,主要是因为文本的大小将直接与图像的大小缩放。由于拉伸,渲染小图像显然会产生非常糟糕的效果。

这就是你应该使用矢量图像格式的原因。但是,图形的默认MATLAB设置会产生一些与光栅图像相同的问题:文本大小未指定为字体大小,并且刻度数随窗口大小而变化。

要在最终渲染中生成最佳绘图,请按照给定的步骤进行操作:

  1. 将图形的字体大小设置为合适的设置(例如11pt)
  2. 渲染情节
  3. 确定获得良好效果的刻度数并手动设置刻度
  4. 将图像渲染为彩色EPS
  5. 在MATLAB代码中,这看起来应该如下所示:

    function [] = nice_figure ( render )
        %
          % invisible figure, good for batch renders.
        f = figure('Visible', 'Off');
          % make plots look nice in output PDF.
        set(f, ...
            'DefaultAxesFontSize', 11, ...
            'DefaultAxesLineWidth', 0.7, ...
            'DefaultLineLineWidth', 0.8, ...
            'DefaultPatchLineWidth', 0.7);
          % actual plot to render.
        a = axes('Parent', f);
          % show whatever it is we need to show.
        render(a);
          % save file.
        saveas(f, 'plot.eps', 'epsc');
          % collect garbarge.
        close(f);
    end
    

    然后,您可以使用以下方式绘制一些花哨的情节:

    function [] = some_line_plot ( a )
        %
          % render data.
        x = -3 : 0.001 : +3;
        y = expm1(x) - x - x.^2;
        plot(a, x, y, 'g:');
        title('f(x)=e^x-1-x-x^2');
        xlabel('x');
        ylabel('f(x)');
          % force use of 'n' ticks.
        n = 5;
        xlimit = get(a, 'XLim');
        ylimit = get(a, 'YLim');
        xticks = linspace(xlimit(1), xlimit(2), n);
        yticks = linspace(ylimit(1), ylimit(2), n);
        set(a, 'XTick', xticks);
        set(a, 'YTick', yticks);
    end
    

    使用以下方式渲染最终输出:

    nice_figure(@some_line_plot);
    

    使用此类代码,您根本不需要担心窗口大小。请注意,我甚至没有显示窗口供您玩它的大小。使用此代码,我总能得到漂亮的输出和小的EPS和PDF文件大小(比使用PNG时小得多)。

    这个解决方案地址的事情是在乳胶代码中使绘图更大时添加更多刻度,但无论如何都无法完成。< / p>