【问题标题】:Assigning figure size to a figure with a given handle (MATLAB)将图形大小分配给具有给定句柄的图形(MATLAB)
【发布时间】:2010-04-07 14:15:43
【问题描述】:

有没有办法将图形的外部位置属性分配给具有给定句柄的图形?

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

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

我还可以使用代码更改图形的属性:

figure('Name', 'Name of figure','NumberTitle','off','OuterPosition',[scrsz(1) scrsz(2) 700 700]);

是否有一个属性名可以用来将 outerposition 属性分配给分配为图 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

结束

谢谢

【问题讨论】:

    标签: matlab figures


    【解决方案1】:

    如果在创建图形时捕获图形句柄

    figH = figure;
    

    您可以随时分配属性

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

    您还可以将图形句柄收集在一个向量中,然后一次设置所有大小。

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

    【讨论】:

    • 令人沮丧的是,似乎不可能创建具有特定句柄和不可见属性的图形。我经常创建一个“可见”设置为“关闭”的图形,然后创建图形的内容,然后在准备好后使其可见。事实上,如果不先创建一个可见的图形,就不能同时设置图形的句柄和它的可见性,这使我走上了许多不雅的解决方法。
    • @EddyTheB:你为什么要设置一个特定的句柄?也许有些东西我没有看到,但设置 tag 属性通常对我有用,这样我什至可以拥有“隐藏”句柄,但仍然能够通过 figH = findall(0,'tag','mySpecificFigureHandle') 专门访问该图
    • 我有一个提升图形的类,该类的属性之一是图形的句柄。所以说我调用了这个类,它创建了一个带有句柄'2'的图形,但是我关闭了这个图形并打开了一些其他图形,这个新图形将有句柄'2'。并且原图中的句柄指向了一个不合适的图。
    • 对于大多数人来说当然不是问题,是的,有很多方法可以解决这个问题,我可以打开一个具有特定句柄的图形,或者我可以打开一个具有特定属性的图形,这对我来说似乎很奇怪,但我不能两者都做。
    • @EddyTheB:这就是为什么要将handleVisibility 设置为false,并且仅按标签寻址数字。持有图形句柄的属性将是具有 get 方法的依赖属性,该方法 (1) 检查现有句柄(存储在隐藏属性中)是否过时,并且 (2) 如果是,则生成一个新图形。
    【解决方案2】:

    以下是一些建议/更正:

    • 您的第二个 for 循环应如下所示:

      for i = plottedloops
      

      这是因为plottedloops已经是一个数组,并且您希望i 在每次通过循环时获取数组中的每个顺序值。例如,for loop 的常见形式是:

      for i = 1:someScalarValue
      

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

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

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

      那么您一次只能打开一个图形。

    【讨论】:

      猜你喜欢
      • 2014-05-20
      • 1970-01-01
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多