Matlab图转pdf:测量精度

Posted

技术标签:

【中文标题】Matlab图转pdf:测量精度【英文标题】:Matlab figure to pdf: measuring accuracy 【发布时间】:2016-03-30 11:23:07 【问题描述】:

我通过保存从以下 Matlab 代码生成的图形来生成 PDF。当x=4 时,它使用 PDF 测量工具生成了一个尺寸正好为 4 英寸的正方形。但是当x=5 出现问题时,生成的 PDF 会失去准确性 - 请参见下图。

我正在尝试绘制一个精确的正方形(其 PDF 测量工具的测量值与 x 定义的大小相同),例如打印正方形的中心和美国字母大小页面的中心 (8.5" x 11" ) 完全匹配。

clear all
close all   
x=4;
plot([0 x  x 0], [0 0 x x]), axis tight
% set(gca, 'Position',[0.1 0.1 .8 .8])
set(gca, 'Units','inches', 'Position',[1 1 x x])
set(gcf, 'Units','inches', 'Position',[0 0 x+2 x+2])
% set(gcf, 'PaperUnits','inches', 'PaperPosition',[0 0 8.5 11])

x=4 时,测量工具显示 4 英寸。正方形与左右、顶部和底部的距离相等。

x=5 测量工具显示为 5.47 英寸时,正方形会更向右和底部移动。

【问题讨论】:

为什么是x+22 不应该改变吗?也许改为x/2 我添加了 2 只是为了保持 gca 边界,从水平和垂直方向都远离 gcf 边界 1 英寸。 您需要为您的问题添加更多详细信息。首先,“pdf失去准确性”是什么意思。详细解释这一点。其次,除了45,您是否尝试过x 的其他号码?是否有任何其他号码有效或只有4?另外,不要使用代码标签来强调,这会让你的读者感到困惑。 我添加了 pdf 快照,以定义我所说的准确性。 如果您不需要生成的 pdf 具有标准尺寸,您可以直接使用 export_fig。如果您这样做,请设置 gcfgca 'position' 以满足您的需求并使用 export_fig。 mathworks.com/matlabcentral/fileexchange/23629-export-fig 【参考方案1】:

根据最后的评论,你可以试试这个代码:

clear all,close all   
x=5;
PaperSize=[8.5 11];
if x<min(PaperSize)
    plot([0 x  x 0], [0 0 x x]), axis tight
    %\\ Set the figure dimensions to US letter and change the background
    set(gcf,'units','inches','Position',[0.1 0.1 PaperSize],'color','w')
    %\\ Set axis position to the center
    set(gca, 'Units','inches', 'Position',[(PaperSize-[x x])./2 x x])
    export_fig('Foo','-pdf','-nocrop')

else
    disp('Axes too wide, man')
end

编辑: 我已经更新了代码,所以它没有错误。

对于我的设置(Win7 Enterprise 32bit,Matlab 2011b,GhostSript),生成的 pdf 如下:

您可以看到轴的位置在 8.5" x 11" 纸的中心。

但是,纸张高度限制为 9.94",这与我的屏幕高度非常接近。对于低于 9.9" 的高度,它可以正常工作。

编辑 2

正如here 的回答,旧版本的 Matlab(2014 年及以下版本)的图形大小受限于屏幕分辨率(RES=get(0,'ScreenSize');以像素为单位)并且已知像素密度(PPI=get(0,'ScreenPixelsPerInch'))我们可以计算以英寸为单位的限制(Limits=RES(2:3)./PPI)。

所以我试图牺牲分辨率:

clear all,close all   
x=5;
PaperSize=[8.5 20];  %\\ Paper Height set to 20" for example
PPI_def=get(0,'ScreenPixelPerInch');
Scr=get(0,'ScreenSize');
Scr_H_px=Scr(4);     %\\ Read the screen height in pixels
PPI_new=floor(Scr_H_px/PaperSize(2)); %\ Count new resolution
if PPI_new>PPI_def   %\\ Chech if we do not need to change the resolution
  PPI_new=PPI_def;
end
%%\\ Set root (0) resolution from default 96 to lower
set(0,'ScreenPixelPerInch',PPI_new)
if x<min(PaperSize)
  plot([0 x  x 0], [0 0 x x]), axis tight
  %\\ Set the figure dimensions to US letter and change the background
  set(gcf,'units','inches','Position',[0.1 0.1 PaperSize],'color','w')
  %\\ Set axis position to the center
  set(gca, 'Units','inches', 'Position',[(PaperSize-[x x])./2 x x])
  export_fig('Foo','-pdf','-nocrop')
else
  disp('Axes too wide, man')
end
%%\\ reset the resolution back
set(0,'ScreenPixelPerInch',PPi_def)

【讨论】:

问题还是一样。错误的输出pdf。 我从提议的解决方案中获得的 pdf 仍然存在测量不准确的问题。 好的。您已更新答案。我很快就会看看它。谢谢 我添加了'-nocrop' 参数,以避免裁剪边缘上的空白。这或许就是“测量不准确的问题”。 一切顺利,但输出 Foo.pdf 的大小错误为 8.5"x8.57" 而不是 8.5x11"。windows 7, 32 Bit, Matlab R2013a。

以上是关于Matlab图转pdf:测量精度的主要内容,如果未能解决你的问题,请参考以下文章

如何把ARCGIS图转成CAD图

ER 图转 SQL 查询

深度图转点云图代码

2021-08-16 灰度图rgb<>yuv

Java 彩色图转灰度图

gray灰度标签图转coco数据集