2012-05-09 4 views
1

В MATLAB R2011b у меня есть скрипт, который явно указывает номер фигуры (например, рисунок 1) и графики на нем. Я хочу сохранить этот сюжет открытым и снова запустить сценарий с разными параметрами, чтобы я мог визуально сравнить новые и предыдущие сюжеты.Перенумеровать цифру MATLAB без сохранения и открытия файла .fig

Как переименовать предыдущую фигуру (к, скажем, рис 2), так что новый сюжет не перезаписать его, и, таким образом, позволяя как участки, чтобы быть видимыми, без

  • Изменение сценария, или
  • Сохранение предыдущей фигуры в виде файла .fig и повторного открытия как другой фигуры

от обоих

  1. Командная строка и
  2. с использованием графического интерфейса пользователя?

ответ

2

Вы можете использовать getobj, чтобы скопировать содержимое от одной цифры до другой:

% get handle of the old figure 
oldFigHandle = gcf; 

% create new figure 
newFigHandle = figure+1; 

% copy the contents from one figure the other 
copyobj(get(oldFigHandle , 'children'), newFigHandle); 

Другие свойства могут быть скопированы с помощью set и get команды:

set(newFigHandle, 'color', get(oldFigHandle , 'color')); 
+0

Большое спасибо, H.Muster. Он работает, за исключением того, что не все свойства скопированы, например. цвет фона рисунка.Я мог бы установить его вручную, но есть ли способ автоматически копировать все? – Gnubie

+0

Мне неизвестен способ копирования всех свойств сразу, но вы можете копировать каждый отдельно, например. для фона: 'copyobj (get (oldFigHandle, 'background'), newFigureHandle);'. См. 'Get (oldFigHandle)' для всех свойств. –

+0

Как я понимаю, «Имя« Фон »не является доступным свойством для экземпляра класса« фигура ». Я полагаю, вы имели в виду« Цвет ». С «Цветным» я получаю «Объектная фигура [1] не может быть дочерним элементом родительской фигуры [1]», хотя используется «Дети». – Gnubie

0

http://www.weizmann.ac.il/matlab/techdoc/ref/figure.html

Вы можете просто сохранить дескриптор current figure

h = []; 
for i = 1:NumGraphs 
    h(i) = gcf; 
    figure; 

    %Your code to create the next graph here 
end 

Затем, чтобы получить обратно конкретный график:

figure(h(i)); 
+0

Спасибо, Дэн. Когда я сделал «h (i) = gcf;» , Я получил: «Индексы индексов должны быть либо реальными целыми положительными, либо логическими». Предположительно, я рассматривался как sqrt (-1). Попытка «h = gcf;» вместо этого все, что он делает, это вернуться к исходной фигуре с таким же числом (рисунок 1); если я сейчас заговорю на рисунке 1, я потеряю исходный сюжет. Я хочу сделать это, чтобы переименовать цифру 1, скажем, цифру 2, так что, когда я рисую рисунок 1, исходная фигура сохраняется. – Gnubie

+0

Да, сначала объявляю i переменной, поэтому i = 1. Я предположил, что вы хотите сделать это в цикле или что-то еще, просто замените i номером, который вы хотите. Но обязательно сохраните каждую фигуру в другом индексе h. – Dan

2

На основании ответа H.Muster, я написал эту функцию, чтобы клонировать фигуру:

%% Clone a figure 
% clone_figure()  - Clone the current figure to a new figure 
% clone_figure(N) - Clone the current figure to figure N 
% clone_figure(0, M) - Clone figure M to a new figure 
% clone_figure(N, M) - Clone figure M to a figure N 
function clone_figure(new_index, old_index) 
    % Get handle of original figure 
    if (exist('old_index', 'var')) 
     if (not(ishandle(old_index))) 
      error('myApp:argChk', ['Figure ',num2str(old_index),' undefined']); 
     end 
     figure(old_index); 
    end 
    old_handle = gcf; 
    % Get handle of clone 
    if (exist('new_index', 'var') && new_index) 
     if (new_index < 0) 
      error('myApp:argChk', ['Index ',num2str(new_index),' invalid']); 
     end 
     figure(new_index); 
    else 
     figure; 
    end 
    new_handle = gcf; 
    % Copy figure's contents and properties 
    copyobj(get(old_handle, 'Children'), new_handle); 
    copyobj(get(old_handle, 'CurrentAxes'), new_handle); 
    set(new_handle, 'Alphamap', get(old_handle, 'Alphamap')); 
    set(new_handle, 'CloseRequestFcn', get(old_handle, 'CloseRequestFcn')); 
    set(new_handle, 'Color', get(old_handle, 'Color')); 
    set(new_handle, 'Colormap', get(old_handle, 'Colormap')); 
    set(new_handle, 'CurrentPoint', get(old_handle, 'CurrentPoint')); 
    set(new_handle, 'DockControls', get(old_handle, 'DockControls')); 
    set(new_handle, 'FileName', get(old_handle, 'FileName')); 
    set(new_handle, 'IntegerHandle', get(old_handle, 'IntegerHandle')); 
    set(new_handle, 'InvertHardcopy', get(old_handle, 'InvertHardcopy')); 
    set(new_handle, 'KeyPressFcn', get(old_handle, 'KeyPressFcn')); 
    set(new_handle, 'KeyReleaseFcn', get(old_handle, 'KeyReleaseFcn')); 
    set(new_handle, 'MenuBar', get(old_handle, 'MenuBar')); 
    set(new_handle, 'Name', get(old_handle, 'Name')); 
    set(new_handle, 'NextPlot', get(old_handle, 'NextPlot')); 
    set(new_handle, 'NumberTitle', get(old_handle, 'NumberTitle')); 
    set(new_handle, 'PaperUnits', get(old_handle, 'PaperUnits')); 
    set(new_handle, 'PaperOrientation', get(old_handle, 'PaperOrientation')); 
    set(new_handle, 'PaperPosition', get(old_handle, 'PaperPosition')); 
    set(new_handle, 'PaperPositionMode', get(old_handle, 'PaperPositionMode')); 
    set(new_handle, 'PaperSize', get(old_handle, 'PaperSize')); 
    set(new_handle, 'PaperType', get(old_handle, 'PaperType')); 
    set(new_handle, 'Pointer', get(old_handle, 'Pointer')); 
    set(new_handle, 'PointerShapeCData', get(old_handle, 'PointerShapeCData')); 
    set(new_handle, 'PointerShapeHotSpot', get(old_handle, 'PointerShapeHotSpot')); 
    set(new_handle, 'Position', get(old_handle, 'Position')); 
    set(new_handle, 'Renderer', get(old_handle, 'Renderer')); 
    set(new_handle, 'RendererMode', get(old_handle, 'RendererMode')); 
    set(new_handle, 'Resize', get(old_handle, 'Resize')); 
    set(new_handle, 'ResizeFcn', get(old_handle, 'ResizeFcn')); 
    set(new_handle, 'SelectionType', get(old_handle, 'SelectionType')); 
    set(new_handle, 'ToolBar', get(old_handle, 'ToolBar')); 
    set(new_handle, 'Units', get(old_handle, 'Units')); 
    set(new_handle, 'WindowButtonDownFcn', get(old_handle, 'WindowButtonDownFcn')); 
    set(new_handle, 'WindowButtonMotionFcn', get(old_handle, 'WindowButtonMotionFcn')); 
    set(new_handle, 'WindowButtonUpFcn', get(old_handle, 'WindowButtonUpFcn')); 
    set(new_handle, 'WindowKeyPressFcn', get(old_handle, 'WindowKeyPressFcn')); 
    set(new_handle, 'WindowKeyReleaseFcn', get(old_handle, 'WindowKeyReleaseFcn')); 
    set(new_handle, 'WindowScrollWheelFcn', get(old_handle, 'WindowScrollWheelFcn')); 
    set(new_handle, 'WindowStyle', get(old_handle, 'WindowStyle')); 
    set(new_handle, 'WVisual', get(old_handle, 'WVisual')); 
    set(new_handle, 'WVisualMode', get(old_handle, 'WVisualMode')); 
    set(new_handle, 'ButtonDownFcn', get(old_handle, 'ButtonDownFcn')); 
    set(new_handle, 'Clipping', get(old_handle, 'Clipping')); 
    set(new_handle, 'CreateFcn', get(old_handle, 'CreateFcn')); 
    set(new_handle, 'DeleteFcn', get(old_handle, 'DeleteFcn')); 
    set(new_handle, 'BusyAction', get(old_handle, 'BusyAction')); 
    set(new_handle, 'HandleVisibility', get(old_handle, 'HandleVisibility')); 
    set(new_handle, 'HitTest', get(old_handle, 'HitTest')); 
    set(new_handle, 'Interruptible', get(old_handle, 'Interruptible')); 
    set(new_handle, 'Parent', get(old_handle, 'Parent')); 
    set(new_handle, 'Selected', get(old_handle, 'Selected')); 
    set(new_handle, 'SelectionHighlight', get(old_handle, 'SelectionHighlight')); 
    set(new_handle, 'Tag', get(old_handle, 'Tag')); 
    set(new_handle, 'UIContextMenu', get(old_handle, 'UIContextMenu')); 
    set(new_handle, 'UserData', get(old_handle, 'UserData')); 
    set(new_handle, 'Visible', get(old_handle, 'Visible')); 
    % from get(gcf) but skip CurrentCharacter, CurrentObject, BeingDeleted, Type 
end 
0

Просто говоривший с сотрудником Mathworks, и было сказано, что лучшим решением является установка для параметра «HandleVisibility» этого показателя «выключено» для его защиты. Например, чтобы держать цифры 1 и 2, сделать

set(1:2, 'HandleVisibility', 'off') 

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

Хотя это точно не отвечает на вопрос, оно достигает того, что я хотел сделать.

+0

Чтобы также скопировать, прикреплен ли фигура, например. Рисунок 1 - цифра 3, установите (3, «WindowStyle», get (1, «Windowstyle»)). (В качестве альтернативы, установите (0, 'DefaultFigureWindowStyle', 'Docked'), чтобы состыковать все новые цифры.) – Gnubie

Смежные вопросы