Как поменять маркер на сюжете - PullRequest
0 голосов
/ 07 декабря 2018

мой вопрос об этом коде:

w = linspace(-5,5,1000);
figure
for alpha = -1:0.2:1
    delay = (alpha.*cos(w)-alpha^2)./(1-2*alpha.*cos(w)+alpha^2);
    plot(w,delay)
    hold on
end
grid on
xlabel('$\omega$', 'interpreter', 'latex')

Я хотел бы знать, возможно ли изменить тип графики в каждой итерации.Например, один раз с кружочками ('o-'), другой с ромбами ('d-') и т. Д.

Спасибо за ваши ответы.

1 Ответ

0 голосов
/ 07 декабря 2018

Попробуйте это:

w = linspace(-5,5,1000);
alpha = -1:0.2:1;
shapes = '+o*.xsd^v><ph';
figure, hold on
for ii=1:numel(alpha)
    delay = (alpha(ii).*cos(w)-alpha(ii)^2)./(1-2*alpha(ii).*cos(w)+alpha(ii)^2);
    plot(w,delay,[shapes(ii),'-'])
end
grid on
xlabel('$\omega$', 'interpreter', 'latex')

На этом графике точки расположены так близко друг к другу, что вы не можете реально составить фигуры.Вы можете уменьшить количество маркеров, построив сначала линию без маркеров, а затем версию с субсэмплингом, используя только маркеры:

w = linspace(-5,5,1000);
alpha = -1:0.2:1;
figure, hold on
shapes = '+o*.xsd^v><ph';
cols = jet(numel(alpha));
for ii=1:numel(alpha)
    delay = (alpha(ii).*cos(w)-alpha(ii)^2)./(1-2*alpha(ii).*cos(w)+alpha(ii)^2);
    plot(w,delay,'-','color',cols(ii,:))
    plot(w(1:50:end),delay(1:50:end),shapes(ii),'color',cols(ii,:))
end
grid on
xlabel('$\omega$', 'interpreter', 'latex')

output of code above, a graph as described

Если числострок больше, чем количество доступных маркеров, приведенный выше код выдаст ошибку индексации.Вместо этого вы можете переключаться между маркерами, используя mod.Заменить shapes(ii) на

shapes(mod(ii-1,numel(shapes))+1)
...