如何在MATLAB中打印小圆圈?

如何在MATLAB中打印小圆圈?,matlab,pdf-generation,matlab-figure,Matlab,Pdf Generation,Matlab Figure,问题我正在尝试将小的(直径=0.02厘米等)填充圆打印成精确大小的pdf格式。我可以打印直径为2厘米、1厘米、0.5厘米的精确圆,但当我尝试打印到~0.04厘米以下时,打印的图形并不包括所有圆。让我用一些示例图片来说明我的意思。请注意,所有圆都按其直径和长度分开,以获得一个漂亮的圆堆栈。第一幅图显示了d=1的相同代码的输出,第二幅为d=0.5,最后一幅为d=0.02 前两张图片是正确的。在最后一幅图中,您可以看到大多数圆未打印。圆圈大小正确,但只打印了少数圆圈。它必须看起来像前两张图片一样

问题我正在尝试将小的(直径=0.02厘米等)填充圆打印成精确大小的pdf格式。我可以打印直径为2厘米、1厘米、0.5厘米的精确圆,但当我尝试打印到~0.04厘米以下时,打印的图形并不包括所有圆。让我用一些示例图片来说明我的意思。请注意,所有圆都按其直径和长度分开,以获得一个漂亮的圆堆栈。第一幅图显示了d=1的相同代码的输出,第二幅为d=0.5,最后一幅为d=0.02

前两张图片是正确的。在最后一幅图中,您可以看到大多数圆未打印。圆圈大小正确,但只打印了少数圆圈。它必须看起来像前两张图片一样叠在一起,但只能放在更小的圆圈里

最低工作示例代码:

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的位置,它们是正确的

-我尝试将marker更改为“.”,但“.”不能小于~2.5 mms,即使您将MarkerSize设置为eps

-我试过矩形,但它不能矢量化(通过代码),因此它的速度慢,导致太多的内存和文件大小

-我尝试将数字位置设置为实际大小,输出并没有改变

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

-我试着分散,但我根本无法从分散中得到我想要的真实尺寸。它说S(标记区域)在文档中是点^2,用于分散,但我无法得到任何大小,例如,带有分散圆的d 1cm


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

我用于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')

什么是DPI设置?这与圆小于一个点有关吗?我使用矢量图,所以DPI应该是无关的,对吗?1点对应于0.0353厘米。关于点,你可能是对的。让我运行一些测试。如果我没记错的话,PDF对所有东西都使用整数。我尝试了点大小的想法。我认为这不是直接原因。我能够将d=0.8点的圆圈打印到小图纸上。在另一个示例中,它无法打印d=25点圆,因为总体图形尺寸为742x525 cm。如果我把一般尺寸降低到150x100厘米,它就可以打印了。在所有的尝试中,我还通过点的方式确保圆心位于整数处。最终,它可以将d=0.5点的圆圈打印到1x1cm的图纸上。在我看来,似乎有一个限制因素/变量产生了这些图像
x
y
直径可以正确。但它几乎像是受到圆圈数量的限制。最后一张图片上正好有49个。您的工作区中是否有这样一个循环变量作为条件或结果变量?