Объединение отдельных графиков MATLAB в одну фигуру: является ли изменение сценария лучшим вариантом? - PullRequest
0 голосов
/ 06 октября 2019

Сценарий ниже производит семь отдельных фигур (каждая включает в себя два графика). Я хотел бы объединить их в одну большую фигуру, которая будет включать все 14 участков. Я думаю, что возможны два решения: либо изменение текущего скрипта, либо добавление графиков в один после того, как они уже нарисованы. Я очень начинающий;Любое простое решение будет очень цениться. (Мои данные: https://www.dropbox.com/s/ggdh03lo10w85vv/Block-1.mat?dl=0).

%% loop through frequencies, plot both channels next to each other
% desired # of points
nPoints = 200;

%vary this value to determine how closely you want the plots to be stacked on one another
stackvar = 0.00003;

% loop through frequencies
for f = 1:nf

   % get channel 1 and 2 data for all attenuations (levels)
   % and desired frequency converted

   % from cell to matrix. time in rows, levels in columns
   datatoplot_ch1 = cell2mat(Ch1D.mean(:, f)');
   datatoplot_ch2 = cell2mat(Ch2D.mean(:, f)');

   % plot in new figure for each frequency
   figure

   % loop through levels for this frequency
   for ii = 1:nl

      % plot fresh trace in first plot

      if ii == 1
         % ch 1
         subplot(1, 2, 1)
         plot(datatoplot_ch1(1:nPoints, ii) + stackvar*(nl - (ii - 1)), 'b');

         % ch 2
         subplot(1, 2, 2)
         plot(datatoplot_ch2(1:nPoints, ii) + stackvar*(nl - (ii - 1)), 'r');
      else

         % channel 1
         subplot(1, 2, 1)
         hold on
         plot(datatoplot_ch1(1:nPoints, ii) + stackvar*(nl - (ii - 1)), 'b');
         hold off

         % channel 2
         subplot(1, 2, 2)
         hold on
         plot(datatoplot_ch2(1:nPoints, ii) + stackvar*(nl - (ii - 1)), 'r');
         hold off
      end

      % add level label to identify trace
      subplot(1, 2, 1)
      text(1, stackvar*(nl - (ii - 1)), sprintf('%d', attens(ii)));
      subplot(1, 2, 2)
      text(1, stackvar*(nl - (ii - 1)), sprintf('%d', attens(ii)));
   end

   subplot(1, 2, 1)
   title(sprintf('%s Ch1 %d', BLOCK, freqs(f)));
   subplot(1, 2, 2)
   title(sprintf('%s Ch2 %d', BLOCK, freqs(f)));

end

1 Ответ

1 голос
/ 09 октября 2019

Вы не можете легко «объединить» графики в одну фигуру после того, как вы уже построили их. Что вы можете сделать, это поместить команду

hold on

сразу после функции figure и

hold off

после последней title. Это обеспечит отображение всех графиков на текущем активном рисунке.

См. Документацию MATLAB для более подробной информации о функции hold: https://www.mathworks.com/help/matlab/ref/hold.html

...