В Matlab, как соединить линию в точечной диаграмме без прыжка - PullRequest
0 голосов
/ 26 февраля 2019

Существует ли элегантный способ соединить линию между ближайшими точками на точечной диаграмме?

Причина, по которой я спрашиваю, заключается в том, что plot соединит линию на основе «индекса строки» Y (данные).По сути, он соединяет точки в одной строке в 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 голосов
/ 26 февраля 2019
idx = ~isnan(Y)

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

или еще лучше, поскольку вы знаете, что хотите избавиться от всего, что меньше -5

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