Как отбросить соединительные линии, где функция прерывистая

Я планирую некоторые функции, которые имеют несколько разрывов. Каждая функция представлена в виде списка. Я хочу соединить точки линиями только там, где функция непрерывна.

Вот упрощенный пример того, что делает сюжет.

<code>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')
</code>

При x = 0.5 существует разрыв, но заговор соединяет все точки с линиями независимо.

Мои функции, конечно, разные. У них обычно есть несколько разрывов в разных местах. Критерий разрыва прост. Скажем, если функция скачет более чем на 0,5, я предполагаю, что она прерывиста в этой точке.

Есть ли вариант в сюжете, чтобы сказать, чтобы он отбросил соединительные линии между точками, где функция прерывистая? Я помню, как легко это делал с помощью gnuplot.

Ответы на вопрос(1)

Решение Вопроса

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')

Редактировать

чтобы вставить NAN в разрывы:

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)

 Andrey Sokolov30 апр. 2012 г., 06:31
Благодарность. Интересная идея, но я не хочу терять ни одного из пунктов. Я полагаю, я мог бы вставить значение nan между абсциссами, где происходит разрыв. Но это было бы неловко и слишком медленно.
 HYRY30 апр. 2012 г., 06:38
Итак, я отредактировал ответ, вставив значение nan. Он скопирует исходные данные, но это очень быстро.

Ваш ответ на вопрос