在Matlab中,如何在散点图中连接线而不会跳转

时间:2019-02-25 21:13:11

标签: matlab plot scatter

在散点图中最近的点之间是否存在连接直线的优雅方法?

我问的原因是因为plot将基于Y(data)的“行索引”连接线。基本上,它连接Y中同一行中的点。但是,这有时会导致跳转,这是由于一行中缺少数据(因此,所有后续数据都将被错误标记并移位1,这不能出于某些实际原因应避免使用。)

这是问题的最小实例。

xrange=linspace(-2,2,100);
Y=repmat(-xrange.^2,4,1)+repmat((-4:-1)',1,100);
Y(Y<-5)=0;
for i=1:100
    [~,~,v]=find(Y(:,i));
    Y(1:length(v),i)=v;
end
Y(Y==0)=nan;
%jump due to missing data
figure;
plot(xrange,Y);
figure;
%from bare eye, we see there are four lines
for i=1:4
    scatter(xrange,Y(i,:),'b');
    hold on
end

使用plot的不良结果是:

plot with jump

跳转是由于缺少数据造成的,实际上这是不可避免的。

但是,如果我们使用scatter,肉眼可以看到实际上有四行。

enter image description here

因此,我要实现的是连接最近的点,但在给定不完善的数据集(缺少某些数据)的情况下,不引入不连续性。我能想到的是在绘制数据之前对数据进行预处理,但是由于实验情况复杂,这并不总是可能的,这很难预先预测哪个数据点会丢失。

任何评论和答案都受到高度赞赏!

1 个答案:

答案 0 :(得分:0)

idx = ~isnan(Y)

plot(xrange(idx), Y(idx))

或者更好,因为您知道要摆脱-5以下的所有问题

idx = Y < -5
plot(xrange(idx), Y(idx))