2016-06-20 8 views
0

Ich habe eine Sequenz von Punkten, die ich plotten möchte, aber die resultierende Kurve könnte an Orten unterbrochen werden, wenn die Punkte zu weit voneinander entfernt sind.plotten Sie eine Kurve als kleinere Teile, Matlab

So in der 1D-CASE:

1 2 3 7 9 11 12 16 18 19 

wäre wie:

  1-2-3 7-9-11-12 16-18-19 

or :  seq1  seq2  seq3 

ich meine Sequenz als diskrete Teile zeichnen möchten seq1seq2 und seq3, die nicht angeschlossen sind.

Ich bin nicht sicher, wie über dieses

+2

Legen Sie Ihre Daten mit NaNs durch, um separate Zeilen zu erhalten, die Zeilen haben jedoch die gleiche Farbe, z. 'plot ([1 2 3 NaN 7 9 11 12 NaN 16 18 19])' –

+0

Wie viel Unterschied ist "zu weit"? –

+0

@Sardar_Usama, so dass das Problem spezifisch ist, ich denke, Sie können jede Distanz Metrik Ihrer Wahl verwenden und einen Schwellenwert haben – idexi

Antwort

1

Meer den Code-Snippet unten für eine Lösung des Problems zu gehen. Ich habe versucht, so viel wie möglich im Code zu erklären, aber zögere nicht zu fragen, ob etwas nicht klar ist.

% constants, thresold defintion 
T = 4; 
% your data 
a = [1 2 3 7 9 11 12 16 18 19 24 25 26 28 35 37 38 39]; 

% preparing the x-axis 
x = 1:length(a); 

% Getting the differences between the values 
d = diff(a); 
% find the suggested "jumps/gaps", greater/equal than the threshold 
ind = find(d>=T); 

figure; 
hold on; 
% Plotting the first part of a 
y = nan*ones(1,length(a)); 
y(1:ind(1)) = a(1:ind(1)); 
plot(x,y); 

% Plotting all parts in between: go through all found gaps 
% and plot the corresponding values of "a" between them 
for j=2:length(ind) 
    y = nan*ones(1,length(a)); 
    y(ind(j-1)+1:ind(j)) = a(ind(j-1)+1:ind(j)); 
    plot(x,y); 
end; 

% Plotting the last part of a 
y = nan*ones(1,length(a)); 
y(ind(j)+1:end) = a(ind(j)+1:end); 
plot(x,y);