2012-04-30 10 views
9

Wykreślam niektóre funkcje, które mają kilka nieciągłości. Każda funkcja jest podana jako lista. Chcę łączyć punkty liniami tylko tam, gdzie funkcja jest ciągła.Jak upuścić linie łączące, w których funkcja jest nieciągła

Oto uproszczony przykład działania fabuły.

x=linspace(0,1,100)  
y=zeros(100) 
y[x<0.5] = x[x<0.5] 
y[x>=0.5] = 1 + x[x>=0.5] 
plot(x, y, '-o') 

Występuje nieciągłość przy x = 0,5, ale wykres łączy wszystkie punkty z liniami niezależnie.

Moje funkcje różnią się oczywiście. Zwykle mają kilka nieciągłości w różnych miejscach. Kryterium nieciągłości jest proste. Powiedzmy, że jeśli funkcja skacze o więcej niż 0.5, zakładam, że w tym momencie jest ona nieciągła.

Czy istnieje opcja na wykresie, aby powiedzieć, aby opuścić linie łączące między punktami, w których funkcja jest nieciągła? Pamiętam, że mogłem to łatwo zrobić z gnuplotem.

Odpowiedz

17

używanie nan przełamać linię na kilka części:

import numpy as np 
from pylab import * 
x=linspace(0,1,100)  
y=zeros(100) 
y[x<0.5] = x[x<0.5] 
y[x>=0.5] = 1 + x[x>=0.5] 

pos = np.where(np.abs(np.diff(y)) >= 0.5)[0] 

x[pos] = np.nan 
y[pos] = np.nan 

plot(x, y, '-o') 

Edit:

wstawić nan na nieciągłości:

pos = np.where(np.abs(np.diff(y)) >= 0.5)[0]+1 
x = np.insert(x, pos, np.nan) 
y = np.insert(y, pos, np.nan) 

enter image description here

+1

Dzięki. Ciekawy pomysł, ale nie chcę stracić żadnego z punktów. Przypuszczam, że mógłbym wstawić wartość nan między odcinkami, w których występuje nieciągłość. Ale byłoby to niezręczne i zbyt wolne. –

+0

Tak więc, zredagowałem odpowiedź z wartością wstawiania nan. Skopiuje oryginalne dane, ale jest bardzo szybki. – HYRY

+0

Wielkie dzięki. To działa dobrze. –

Powiązane problemy