如何更改绘图中的标记

时间:2018-12-07 15:47:01

标签: matlab plot octave matlab-figure

我的问题是关于此代码的:

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 :(得分:4)

尝试一下:

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)