Присвоение размера фигуры фигуре с заданной ручкой (MATLAB) - PullRequest
5 голосов
/ 07 апреля 2010

есть ли способ присвоить свойство внешней позиции фигуры фигуре с заданным дескриптором?

Например, если бы я хотел определить фигуру как, скажем, цифру 1, я бы использовал:

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

Я также могу изменить свойства фигуры, используя код:

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

Можно ли использовать имя свойства, чтобы назначить свойство внешнего положения фигуре, назначенной на рисунке 1?

Причина, по которой я спрашиваю об этом, заключается в том, что я использую команду save2word (из обмена файлами MATLAB), чтобы сохранить некоторые графики из функции, которую я создал, в файл слов, и я хочу ограничить число цифр иметь открытый, как это делает это.

Остальной код, который у меня есть:

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 голосов
/ 07 апреля 2010

Если вы захватите дескриптор фигуры при создании фигуры

figH = figure;

Вы можете назначить свойства в любое время

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

Вы также можете собрать маркеры фигур внутри вектора, а затем сразу установить все размеры.

Если по какой-то причине вы не можете захватить дескриптор фигуры, вы можете использовать findall для поиска фигуры с определенным именем или gcf, чтобы получить дескриптор текущей (последней выбранной / открытой) фигуры.

0 голосов
/ 07 апреля 2010

Вот несколько предложений / исправлений:

  • Ваш второй цикл for должен выглядеть следующим образом:

    for i = plottedloops
    

    Это потому, что plottedloops это уже массив, и вы хотите, чтобы i принимал каждое последовательное значение в массиве для каждого прохода в цикле. Например, общая форма для для цикла :

    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]);
    

    Тогда у вас должна быть только одна открытая фигура за раз.

...