我试图以这样一种方式在MATLAB中生成棋盘格图案,即当它在美国字母大小的纸张上打印时,每个盒子的宽度将为30毫米。
我尝试更改gcf
的各种属性,例如'Units'
和'PaperSize'
等,但是PDF无法按要求打印。
我遇到了其他几种在线方法来生成所需的内容,但是我想在MATLAB中生成一个方法。有任何想法吗?下面是示例代码。
width = 30;
I = checkerboard(width,5,4);
I = I>0.5;
imshow(I);
saveas(gcf,'checkerboard.pdf')
答案 0 :(得分:0)
由于Matlab不知道屏幕的物理尺寸,因此Matlab只能基于像素生成宽度。
一种方法是找到屏幕的每英寸像素(PPI)。这是website,用于根据屏幕尺寸和分辨率计算PPI。然后,我们可以计算width
(30mm的像素)= PPI * 1.1811。 (1.1811英寸等于30毫米)
例如,对于PPI = 220(15.4英寸,2880 * 1800)的屏幕,width=220*1.1811=260
。
答案 1 :(得分:0)
有些图形属性以'Paper'
开头,这些属性指定了在打印(到PDF或打印机)时图形在纸上的大小和位置。 Here is a list of all figure properties。您可以在“打印和导出”标题下找到这些属性(请参阅左窗格内容表)。
我们可以如下使用这些属性。请注意,我们不在乎屏幕上图形的大小,因此将其保留为默认大小。我们要做的是设置'PaperPosition'
属性,以便图形在打印时具有一定的大小。然后,我们创建填充该图的棋盘格图案的图形。因此,图纸在打印时将具有图形本身的大小。
请注意,我们如何将'PaperSize'
属性设置为英寸(8.5英寸x 11英寸是美国字母),但是将'PaperPosition'
属性设置为厘米(以便我们可以轻松地将3x3厘米的正方形绘制)。
图形本身可能可以简化,但这是可行的。打印到PDF时,使用补丁(即创建矢量绘图)绘制图案比使用图像(即OP中的checkerboard
函数)绘制图案要有效得多。输出更漂亮,文件更小。但是显示图像也可以这样做。
% Grid size (number of squares)
m = 6; n = 8;
% Square size (in centimeters)
side = 3;
% Create figure and set sizes for printing
figh = figure;
set(figh,'PaperUnits','inches','PaperSize',[8.5 11]);
set(figh,'PaperUnits','centimeters','PaperPosition',[1,1,side*m,side*n]);
% Create axes that fill the figure
axh = axes('Parent',figh,'Units','normalized','Position',[0,0,1,1]);
set(axh,'Color',[1,1,1])
set(axh.XAxis,'Visible','off');
set(axh.YAxis,'Visible','off');
% Draw rectangles
set(axh,'XLim',[0,m],'YLim',[0,n]);
for ii=0:m
for jj=0:n
if mod(ii+jj,2)==0
rectangle('Position',[ii,jj,1,1],'FaceColor',[0,0,0],'LineStyle','none');
end
end
end
% Print to PDF
print(figh,'-dpdf','checkerboard.pdf')