如何在MATLAB中打印小圆圈?

时间:2018-11-01 12:59:15

标签: matlab pdf-generation matlab-figure

问题,我正在尝试将小尺寸(直径= 0.02厘米等)的实心圆圈打印为pdf的确切尺寸。我可以打印直径分别为2厘米,1厘米,0.5厘米的确切圆圈,但是当我尝试降至约0.04厘米以下时,打印的图形并不包括所有圆圈。让我通过一些示例图片向您展示我的意思。请注意,所有圆都通过其直径长度分开,以获得一个不错的堆栈。第一张图像显示的是相同代码的输出,其中d = 1,第二张是d = 0.5,最后一张是d = 0.02。

d=1cm

d=0.5cm

d=0.02 cm

前两个图像正确。在最后一张图像中,您可以看到未打印最多的圆圈。圆圈的大小正确,但仅打印了一些。它看起来必须像前两张图片一样堆叠,但只能以较小的圆圈显示。

最低工作示例代码:

cm2pts=72/2.54; %cm to inch and inch to points = cm to points
ax.Units='points'; fig.Units='points';
height=cm2pts*220; % 'page' dimensions
width=cm2pts*150;
ax.XLim=([0 width]); ax.XLim=([0 height]);
diameter=0.02*cm2pts;
distance=diameter;
...
here is a loop that creates a x,y position vector for all dots
...
plot(ax,x,y, ... 'MarkerFaceColor','black','MarkerEdgeColor','none', ...
'Marker','o','LineStyle','none','MarkerSize',diameter);
set(ax,'xtick',[],'ytick',[]);
ax.Units='normalized'; ax.Position=[0 0 1 1]; ax.Units='points';
fig.PaperUnits='points';
fig.PaperPositionMode = 'manual';
fig.PaperPosition=[0 0 width height];
fig.PaperSize = [PaperPosition(3) PaperPosition(4)];
print(fig,'-painters','output.pdf','-dpdf')

注释

-我尝试缩放所有内容(以5倍的尺寸打印,这样圆圈会更大),以为我在打印时会缩小比例(至20%),但仍然失败,可能是圆圈与绘图的比例尺寸。

-我手动检查了x,y位置,它们是正确的。

-我尝试将标记更改为“。”但是“。”即使您将MarkerSize设置为eps,也不能小于2.5毫米。

-我尝试了矩形,但是无法将其矢量化(通过代码的方式),因此它很慢,并且会导致ram和文件大小过多。

-我尝试将图形位置设置为实际大小,输出未更改。

-在所有情况下输出文件的尺寸都是正确的。

-我尝试了散布,但是我根本无法从散布中获得想要的真实尺寸。它说S(标记区域)在文档中是散点,为点^ 2,但我无法获得任何大小,例如,散点圆为d 1cm。

-行为在Matlab在线上是相同的。

1 个答案:

答案 0 :(得分:1)

我用于Matlab R2018b的代码,它将输出一个带有所有必需点的pfd。

fig = figure;
ax = axes;

cm2pts=72/2.54; %cm to inch and inch to points = cm to points
ax.Units='points'; fig.Units='points';
height=cm2pts*220; % 'page' dimensions
width=cm2pts*150;
ax.XLim=([0 width]); ax.XLim=([0 height]);
diameter=0.01*cm2pts;
distance=diameter;

% generate 100 by 100 dots
X = 1:100;
[x,y] = meshgrid(X,X);


% plotting
plot(ax,x,y, 'MarkerFaceColor','black','MarkerEdgeColor','none', ...
    'Marker','o','LineStyle','none','MarkerSize',diameter);

set(ax,'xtick',[],'ytick',[]);
ax.Units='normalized'; ax.Position=[0 0 1 1]; ax.Units='points';
fig.PaperUnits='points';
fig.PaperPositionMode = 'manual';
fig.PaperPosition=[ 0 0 width height];
fig.PaperSize = [fig.PaperPosition(3) fig.PaperPosition(4)];
print(fig,'-painters','output.pdf','-dpdf')