Нанесение существующего участка MATLAB на другую фигуру

Я использовал команду plot для построения фигуры, а затем изменил множество ее свойств с помощью команды set. Я также храню ручку сюжета (скажем, h1).

Что мне нужно, так это использовать ручку, чтобы снова нарисовать ту же фигуру в моем коде. Я проверил команду plot и не нашел ни одной версии, которая принимает дескриптор. Я также подумал о том, чтобы получить Xdata и Ydata и использовать их, чтобы заново нарисовать одну и ту же фигуру.

Какое самое простое решение?

Редактировать 1: рабочий пример кода, основанный на copyobj, который предложил PeterM.

hf(1) = figure(1);
plot(peaks);

hf(2) = figure(2);
plot(membrane);

hf(3) = figure(3);
ha(1) = subplot(1,2,1);
ha(2) = subplot(1,2,2);

for i = 1:2
    hc  = get(hf(i),'children');
    hgc = get(hc, 'children');
    copyobj(hgc,ha(i));
end

Редактировать 2: я также нашел эту функцию, которая может копировать рисунки (включая легенду) в подзаговор.

5 ответов

Решение

Я сталкивался с этой ситуацией раньше. В зависимости от того, что вы пытаетесь сделать, функция copyobj может оказаться подходящей. Эта функция позволяет вам взять содержимое одной оси и скопировать его в новую фигуру.

Улучшение @PeterM приятного ответа, одним из простых способов будет:

fig2H=copy(gcf) % or change gcf to your figure handle

Но это зависит от того, что вы хотите, хотите ли вы только оси или всю фигуру... (кстати, похоже, что она не копирует дескриптор легенды).

Ты можешь использовать saveas сохранить рисунок в файл, а open загрузить точно такую ​​же фигуру из этого файла.

Я использовал функцию figs2subplots (данную в Edit2 в исходном вопросе) - она ​​работает и очень проста в использовании.

Это был бы самый ленивый способ выполнить то, что вы хотите.

% Sample plot
f1 = figure(1);
plot(0:0.1:2*pi, sin(0:0.1:2*pi));
f2 = figure(2);

% The code you need
saveas(f1, 'temp.fig')
f2 = hgload('temp.fig')
delete('temp.fig')
Другие вопросы по тегам