gpt4 book ai didi

matlab - 如何在 MATLAB 中打印小圆圈?

转载 作者:太空宇宙 更新时间:2023-11-03 19:47:19 24 4
gpt4 key购买 nike

问题 我正在尝试将小的(直径=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 mm。

-我试过 rectangle 但它不能被矢量化(通过代码的方式)因此它很慢并且导致太多的 ram 和文件大小。

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

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

-我尝试了 scatter,但我根本无法从 scatter 中获得我想要的实际大小。它说 S(标记区域)在文档中是 points^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')

关于matlab - 如何在 MATLAB 中打印小圆圈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53101784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com