matlab自带的标记点添加,会按照数据长度一个一个添加,这就导致了在数据比较密集的情况下,出现Marker过于密集的情况。
可以使用plot直接绘制一条曲线,然后再插入固定个数的标记点,来实现减少Marker密度的目的。
clear;
omega1 = 2*pi;
t = 0:1e-3:1*pi;
xr = sin(omega1*(0:1e-3:1*pi));
CNT = 50;
k = round(linspace(1, size(t,2), CNT));
figure(1);clf;
plot(t, xr, 'k'); hold on; % 实际曲线
plot(t(k), xr(k), 'k*'); % 标记点
如果引起了图例的变化,可以收集句柄并只产生对应的图例。
clear;
omega1 = 2*pi;
t = 0:1e-3:1*pi;
xr = sin(omega1*(0:1e-3:1*pi));
CNT = 50;
k = round(linspace(1, size(t,2), CNT));
figure(1);clf;
plot(t, xr, 'k'); hold on; % 实际曲线
plot(t(k), xr(k), 'k*'); % 标记点
f1 = plot(t(1), xr(1), 'k*-'); % 标记点legend
legend(f1,'xr');
=====评论里的STR618同学给了一个新方法,感觉效果更好,更方便一点=====
还有一个解决办法就是,在plot这个的参数中,有一个‘MarkerIndices’参数,设置一下就好了,直接就能画了。例如画一段间隔的Marker点的代码,这段代码可以在matlab2016b运行成功,其他版本的不能保证。
x = 0:0.01:15;
y = sin(x);
maker_idx = 1:30:length(x);
plot(x,y,'-s','MarkerIndices',maker_idx)