2012-04-30 9 views
9

Estoy trazando algunas funciones que tienen varias discontinuidades. Cada función se da como una lista. Quiero conectar puntos con líneas solo donde la función es continua.Cómo soltar líneas de conexión donde la función es discontinua

Aquí hay un ejemplo simplificado de lo que está haciendo la trama.

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

Hay una discontinuidad en x = 0.5, pero la gráfica conecta todos los puntos con líneas independientemente.

Mis funciones son diferentes, por supuesto. Por lo general, tienen varias discontinuidades en diferentes lugares. El criterio para la discontinuidad es simple. Digamos, si la función salta en más de 0.5, supongo que es discontinua en ese punto.

¿Hay una opción en el gráfico para indicarle que deje caer las líneas de conexión entre los puntos donde la función es discontinua? Recuerdo que pude hacer eso fácilmente con gnuplot.

Respuesta

17

uso nan para romper la línea en múltiples segmentos:

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

Editar:

para insertar nan en las discontinuidades:

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

Gracias. Una idea interesante, pero no quiero perder ninguno de los puntos. Supongo que podría insertar un valor nan entre las abscisas donde ocurre la discontinuidad. Pero eso sería incómodo y demasiado lento. –

+0

Por lo tanto, edité la respuesta con insertar valor nan. Copiará los datos originales, pero es muy rápido. – HYRY

+0

Muchas gracias. Esto funciona bien –

Cuestiones relacionadas