Matlab: вывод данных из другого скрипта - PullRequest
0 голосов
/ 22 февраля 2020

Можно ли включить данные в график из другого сценария в matlab?

У меня есть два набора изображений, которые я обрабатывал по-разному в двух отдельных сценариях. Однако я хочу разместить данные обоих сценариев на одном графике.

1 Ответ

0 голосов
/ 22 февраля 2020

Несколько способов достижения 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);

Кроме того, первый и второй сценарии можно вызывать непосредственно внутри третьего сценария, что избавляет пользователя от необходимости вручную запуск первых двух сценариев.

Example of method 1. Blue line was originally plotted on figure 1. Red line was originally plotted on figure 2. Now they have been merged on the newest figure.

Метод 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)
    

Example of method 2. Blue lines were originally plotted on figure 1. Red lines were originally plotted on figure 2. They have been saved and reopened, with lines from figure 1 moved to figure 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...