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+2
? 2
不应该改变吗?也许改为x/2
?
我添加了 2 只是为了保持 gca 边界,从水平和垂直方向都远离 gcf 边界 1 英寸。
您需要为您的问题添加更多详细信息。首先,“pdf失去准确性”是什么意思。详细解释这一点。其次,除了4
和5
,您是否尝试过x
的其他号码?是否有任何其他号码有效或只有4
?另外,不要使用代码标签来强调,这会让你的读者感到困惑。
我添加了 pdf 快照,以定义我所说的准确性。
如果您不需要生成的 pdf 具有标准尺寸,您可以直接使用 export_fig
。如果您这样做,请设置 gcf
和 gca
'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:测量精度的主要内容,如果未能解决你的问题,请参考以下文章