Как удалить соединительные линии, где функция прерывиста
Я планирую некоторые функции, которые имеют несколько разрывов. Каждая функция приводится в виде списка. Я хочу соединить точки линиями, только там, где функция непрерывна.
вот упрощенный пример того, что делает 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)