使用给定的句柄为图形分配图形大小(MATLAB)

5

有没有一种方法可以将一个给定句柄的图形的outerposition属性分配给一个图形?

例如,如果我想将一个图形定义为figure 1,我会使用:

 figure(1)
 imagesc(Arrayname) % I.e. any array

我可以使用代码更改图形的属性:
figure('Name', 'Name of figure','NumberTitle','off','OuterPosition',[scrsz(1) scrsz(2) 700 700]);

有没有一种属性名称可以用来将outerposition属性分配给作为figure 1分配的图形?

我之所以问这个问题是因为我正在使用一个名为save2word的命令(来自MATLAB文件交换)将我制作的一些绘图函数保存到一个Word文件中,我想限制我打开的图形数量,因为它执行此操作。

我拥有的其余代码是:

plottedloops = [1, 5:5:100]; % Specifies which loops I want to save


GetGeometry = getappdata(0, 'GeometryAtEachLoop') % Obtains a 4D array containing geometry information at each loop


NumSections = size(GetGeometry,4); %Defined by the fourth dimension of the 4D array

for j = 1:NumSections
    for  i = 1:plottedloops
    P = GetGeometry(:,:,i,j);

    TitleSize = 14;
    Fsize = 8;
    % Save Geometry

    scrsz = get(0,'ScreenSize'); %left, bottom, width height   


  figure('Name', 'Geometry at each loop','NumberTitle','off','OuterPosition',[scrsz(1) scrsz(2) 700 700]); This specifies the figure name, dims etc., but also means multiple figures are opened as the command runs.

% I have tried this, but it doesn't work:
% figure(0, 'OuterPosition',[scrsz(1) scrsz(2) 700 700]);

    imagesc(P), title('Geometry','FontSize', TitleSize), axis([0 100 0 100]);

    text(20,110,['Loop:',num2str(i)], 'FontSize', TitleSize); % Show loop in figure
    text(70,110,['Section:',num2str(j)], 'FontSize', TitleSize);% Show Section number in figure

    save2word('Geometry at each loop'); % Saves figure to a word file

end

结束

谢谢

2个回答

3
如果您在创建图形时捕获图形句柄
figH = figure;

您可以随时分配属性

set(figH,'OuterPosition',[scrsz(1),scrsz(2),700,700]);

你也可以将图形句柄收集到一个向量中,然后一次性设置所有大小。

如果由于某种原因无法捕获图形句柄,则可以使用findall查找具有特定名称的图形,或者使用gcf获取当前(最后选择/打开)图形的句柄。


令人沮丧的是,似乎无法创建一个具有特定句柄和属性但不可见的图形。我经常创建一个 'Visible' 设置为 'off' 的图形,然后创建图形的内容,一旦准备好就将其设置为可见。不能在创建可见图形之前同时设置图形的句柄和可见性,这导致我走了许多不太优雅的解决方法。 - EddyTheB
@EddyTheB:你为什么想要设置一个特定的句柄?也许有些东西我没有看到,但是通常设置“tag”属性就可以解决我的问题,这样我甚至可以拥有“隐藏”的句柄,但仍然能够通过figH = findall(0,'tag','mySpecificFigureHandle')来具体访问图形。 - Jonas
我有一个类,它会生成一个图形,并且该类的一个属性是该图形的句柄。假设我调用该类并创建了一个句柄为“2”的图形,但是然后我关闭了该图形并打开了其他图形,那么新的图形将具有句柄“2”。而原始图形中的句柄指向不适当的图形。 - EddyTheB
对大多数人来说肯定不是问题,而且有很多解决方法,但我觉得奇怪的是我可以用特定句柄打开一个图形,也可以使用特定属性打开一个图形,但我无法同时做到这两点。 - EddyTheB
@EddyTheB:这就是为什么你想将 handleVisibility 设置为 false,并且只通过标签来寻址图形。存储图形 handle 的属性会成为一个依赖属性,并有一个 get 方法,(1) 检查现有的 handle (存储在隐藏属性中) 是否过时,(2) 如果是,则生成一个新的 figure。 - Jonas
是的,那听起来确实是更好的做法。感谢您的建议。 - EddyTheB

0

以下是一些建议/更正:

  • 你的第二个for循环应该像这样:

    for i = plottedloops
    

    这是因为plottedloops已经是一个数组,而你想让i在每次循环中取得数组中的每个顺序值。例如,for循环的常见形式是:

    for i = 1:someScalarValue
    

    其中术语1:someScalarValue会为您创建一个数组。

  • 看起来你想在一个图形窗口中绘制一些东西,然后用save2word保存它,然后再绘制其他东西,然后保存,等等。因此,我建议在你的for循环之外创建你的图形窗口,并在循环内部简单地重新绘制窗口内容。如果你将这两行移到循环之外:

    scrsz = get(0,'ScreenSize'); %left, bottom, width height   
    figure('Name', 'Geometry at each loop','NumberTitle','off',...
           'OuterPosition',[scrsz(1) scrsz(2) 700 700]);
    

    那么你每次只会有一个图形。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接