Несколько способов достижения sh этой цели в зависимости от вашего рабочего процесса.
Метод 1
- Запустите первый скрипт, сохраняя дескрипторы для линий / контуров, которые вы хотите объединить позже.
- Запустите второй сценарий, сохраняя маркеры для линий / контуров, которые вы хотите объединить позже.
- Создайте новые фигуры / оси и скопируйте маркеры из предыдущих маркеров в новые оси.
Этот метод относительно быстро применяется для простых фигур.
x = 1:10;
y1 = rand([1, 10]);
y2 = rand([1, 10]);
% Contents of first script
% I saved the handle of the line as l1
figure;
l1 = plot(x, y1, 'b');
% Contents of second script
% I saved the handle of the line as l2
figure;
l2 = plot(x, y2, 'r');
% After running first and second scripts, I run a third script that copies
% the plotted objects onto a new axes
figure;
ax = axes;
l1c = copyobj(l1, ax);
l2c = copyobj(l2, ax);
Кроме того, первый и второй сценарии можно вызывать непосредственно внутри третьего сценария, что избавляет пользователя от необходимости вручную запуск первых двух сценариев.
Метод 2
Этот метод, вероятно, будет более эффективным, если каждый раз запуск двух сценариев занимает много времени, или держать ручку на каждом построенном объекте слишком утомительно. Например:
- сценарий 1 генерирует много фигур, но только одна из них будет объединена с фигурой из сценария 2; или
- сценарий 1 генерирует фигуру с 10+ линиями / контурами, и изменение существующего кода, чтобы сохранить маркеры для каждого из них, является слишком большой проблемой.
В этом случае Рабочий процесс выглядит следующим образом:
- Запустите сценарий 1, сохраните рисунок, который вы хотите позже скопировать в виде файла MATLAB
.fig
. - (В качестве альтернативы запустите сценарий 1 и сохраните маркер для фигуры, которую вы хотите дублировать позже.)
- Повторите для сценария 2.
В сценарии 3 загрузите файлы .fig
и скопируйте линии / контуры с одной фигуры на другую.
x = 1:10;
% Contents of first script
% I save the figure as 'fig1.fig'
% Alternatively, I save the handle of the figure as fh1
fh1 = figure;
hold on;
for i = 1:10
plot(x, rand([1, 10]), 'b');
end
savefig(fh1, 'fig1')
% Contents of second script
% I save the figure as 'fig2.fig'
% Alternatively, I save the handle of the figure as fh2
fh2 = figure;
hold on;
for i = 1:10
plot(x, rand([1, 10]), 'r');
end
savefig(fh2, 'fig2')
%% Recover from figure handles
% get handle to the axes of each figure. Assuming each figure only has 1
% axes and no legend
ax1 = fh1.Children;
ax2 = fh2.Children;
copyobj(ax1.Children, ax2) % figure 2 now contains the plots from figure 1
%% Recover from .fig files
close all
FH1 = openfig('fig1.fig');
FH2 = openfig('fig2.fig');
AX1 = FH1.Children;
AX2 = FH2.Children;
copyobj(AX1.Children, AX2)