Как построить несколько линий на одном графике и сохранить их - PullRequest
0 голосов
/ 14 января 2020

Вопрос 1 РЕШЕНО

Я работаю над следующим моделированием:

x = [8 9 7 6 5];`
if isvector(x)
      for i=1:length(x)
          % simulation gives me a matrix y,t,z, (c by 5)
          % where size(y,1)=size(z,1)=size(t,1)= lenght(x)=5
          % size(y,2)=c
          % a plot will collect all lines:
%            for x=8 there are 3 lines ( the first row of each matrix `y`, `t`, `z`
%            for x=9 there are 3 lines ( the second row of each matrix `y`, `t`, `z`
%            ...
%            for x=5 there are 3 lines ( the 5th row of each matrix `y`, `t`, `z`
          end
end

Позвольте мне показать пример:

y = rand(5,8)
t = rand(5,8)
z = rand(5,8)

Для построения я начал с:

% I was using the initial loop:

if isvector(x)
      for i=1:length(x)
          % simulation gives me a matrix y,t,z, (c by 5)

          %% plots
          h(1)=figure;
          plot (c,y(i,:));
          grid on;
          hold on;
          plot (c,t(i,:));
          plot (c,z(i,:));
          hold off;
          end
end

В результате MATLAB дает мне 3 цифры, но я ожидал только одну фигуру с несколькими строками. Я начинаю изнутри исходного l oop и создаю новый l oop, но это мне не помогает. Как это исправить? Как построить все линии (в этом примере все 15 строк (#x (i) = 5, #array = 3))?

1 Ответ

1 голос
/ 14 января 2020

Если вам нужен этот l oop для дальнейшего анализа, просто переместите figure() за пределы l oop. В противном случае вы также можете построить все линии из одного plot() вызова:

x = [8 9 7 6 5];
c = 1:8;
y = rand(5, 8);
t = rand(5, 8);
z = rand(5, 8);

% Loop approach, move figure() outside the loop
if isvector(x)
  figure(1);
  hold on;
  for i = 1:length(x)
    plot(c, y(i, :));
    plot(c, t(i, :));
    plot(c, z(i, :));
  end
  hold off;
  grid on;
end

% Plot everything with one plot() call
if isvector(x)
  figure(2);
  plot(c, [y; t; z]);
  grid on;
end

Выводы одинаковы, за исключением цвета линий, который зависит от порядка построения (первая строка y, t, z, вторая строка ... и т. Д. Против всех строк из y, всех строк из t и т. Д.

Надеюсь, что помогает!


РЕДАКТИРОВАТЬ: Чтобы отобразить все три линии для каждого x(i) на отдельных рисунках, вы можете использовать этот подход l oop:

x = [8 9 7 6 5];
c = 1:8;
y = rand(5, 8);
t = rand(5, 8);
z = rand(5, 8);

if isvector(x)
  for i = 1:length(x)
    figure(i);
    hold on;
    plot(c, y(i, :));
    plot(c, t(i, :));
    plot(c, z(i, :));
    hold off;
    grid on;
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...