如何将默认图形大小设置为全屏以使用parfor循环?

16次浏览(过去30天)
我在流建模对象与各种方向和动画的结果使用电影命令。我为每个循环迭代存储图形帧,然后在结束时播放它们。这对于简单的流动和很少的方向很有效,但是对于较大的数据集需要很长时间(~20分钟,大约80个翼型方向)。我可以使用并行池大幅减少这个时间,但出现的问题是parfor将动画窗口大小设置为默认图形大小。我创建了一个新的全屏图使用
图(“单位”“归一化”“outerposition”, [0 0 1 1])
在圈子之外
集(gcf,“单位”“归一化”“outerposition”,[0 0 1 1])
循环内部
但是,在计算后运行影片时,每次运行仍然是默认的图形大小。如果我可以将默认窗口大小设置为全屏,我相信这将解决问题。我在下面附上了收集帧的循环。
注意:我确实意识到parfor并不适合这个目的,因为它是非连续的,可能会导致我的帧的顺序混乱。然而,这些影响在我以前的运行中可以忽略不计,对我来说,稍微降低质量是值得节省时间的。
关闭所有
图(“单位”“归一化”“outerposition”,[0 0 1 1])
I = 1:长度(alpha)
levelAlpha = find(alpha == alpha(i));%得到攻角
srcstrength = ss(levelAlpha,:);获得源的百分比
vortstrength = sv(levelAlpha,:);获得涡旋强度的百分比
持有
[hp, coordinates] = hessPlot(uinf, alpha(i), xcord, ycord, srcStrengths, vortStrengths,“两个”1);%绘图使用自定义流量叠加功能
标题([赫斯-史密斯可视化翼型);
Patch (coordinates (:, 1), coordinates(:, 2),[。8 .8 .8]);
集(gcf,“单位”“归一化”“outerposition”,[0 0 1 1])
集(gcf,“可见”“关闭”
盒子
传奇(sprintf ('\\alpha = %.1f^{\\circ}'α(i)))
帧(i) = getframe(gcf);%得到帧
clf%清算图
结束
集(gcf,“可见”“上”
非常感谢你能提供的任何帮助!

答案(1)

凯文·格里森
凯文·格里森 2017年5月3日
您可以通过修改图形根对象的以下默认属性来设置图形的默认大小:
> >集(大的,“defaultFigureUnits”“归一化”
> >集(大的,“defaultFigurePosition”,[0 0 1 1])
在此之后创建的所有图形都将全屏显示。
创建一个图形数组来完成这项工作也是值得的,这样每个工作人员都有自己的图形可以修改:
初始值:
numWorkers = 2;
figure ums = 0 (numWorkers,1);
我= 1:numWorkers
图;
fig.Position = [0 0 1 1];
figignums (i) = fig;
结束
parfori = 1:10
figIdx = mod(i,numWorkers)+1;%要修改的图形的索引
fig = figure(figigums (figIdx));%需要修改的数字
结束
1评论
托马斯·迦勒
托马斯·迦勒 2017年5月3日
谢谢你!默认的图形大小可以工作!(作为《银河护卫队》的粉丝,我被图形根手柄逗乐了)。遗憾的是,轴本身并没有占据整个图形。虽然我可以调整纵横比,但我无法让轴本身增加大小。我担心这可能只是运行MATLAB parfor图形的固有问题。这也是为每个工作人员分配数字的一个非常聪明的技巧,但遗憾的是,它在这个应用程序中不是非常有效。再次感谢您的帮助!

登录评论。

类别

了解更多交互控制和回调帮助中心而且文件交换

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!