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

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

вот упрощенный пример того, что делает plot.

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

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

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

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

1 ответов


используйте nan, чтобы разбить линию на несколько сегментов:

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:

для вставки 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)

enter image description here