1

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

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

关于以下两点,我想知道这些点:

  1. When chosing the figure-size bigger, there are more tickmarks shown and the single point markers are better visible
  2. 当使用小数字并使用大-m选项时,我仍然只有一些刻度线
  3. 当我生成一个非常大的图像(例如分辨率 300 并且仍然是 2000*2000 像素)并将其嵌入到文档中时:这比看起来难看吗?这会嵌入一个很好的缩放模式还是和你上传一个 1000*1000px 图像到主页并通过 html 中的 widht 和 height 标记嵌入它一样丑陋 -> 浏览器显示它很丑,因为浏览器没有不要real调整大小。所以它看起来不清晰和丑陋。

提前致谢!

4

1 回答 1

4

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

只需将绘图保存为EPS格式,即可使用latex. 我通常使用以下方法保存我的 MATLAB 图以供发布:

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

并使用以下命令将它们直接嵌入到我的乳胶文件中:

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

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

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

使用 EPS 还可以获得的一个好处是,您实际上可以指定字体大小,以便即使您调整文档中图像的大小,文本也可以阅读。

至于刻度的数量,您可以查看 MATLAB 文档中的轴属性。特别是,XTick无论YTick窗口分辨率是多少,手动控制出现的刻度数非常有用。

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

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

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

  1. 将图形的字体大小设置为合适的设置(例如 11pt)
  2. 渲染情节
  3. 确定刻度数以获得良好效果并手动设置刻度
  4. 将图像渲染为彩色 EPS

在 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 时小得多)。

该解决方案唯一没有解决的问题是当乳胶代码中的绘图变大时添加更多的刻度,但这无论如何都无法完成。

于 2011-07-05T20:29:04.403 回答