Редактировать: у меня это было открыто и ушло, поэтому я не заметил ответа @Ricardo. Поскольку matplotlib будет преобразовывать вещи в массивы numpy в любом случае, есть более эффективные способы сделать это.
Например:
Просто начертите две разные линии, одну со стилем пунктирной линии, а другую со стилем сплошной линии.
E.g.
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y1 = 2 * x
y2 = 3 * x
xthresh = 4.5
diff = np.abs(y1 - y2)
below = diff < xthresh
above = diff >= xthresh
# Plot lines below threshold as dotted...
plt.plot(x[below], y1[below], 'b--')
plt.plot(x[below], y2[below], 'g--')
# Plot lines above threshold as solid...
plt.plot(x[above], y1[above], 'b-')
plt.plot(x[above], y2[above], 'g-')
plt.show()
![введите здесь описание изображения](https://i.stack.imgur.com/Qj2E9.png)
В случае, когда они циклические, используйте маскированные массивы:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y1 = 2 * np.cos(x)
y2 = 3 * np.sin(x)
xthresh = 2.0
diff = np.abs(y1 - y2)
below = diff < xthresh
above = diff >= xthresh
# Plot lines below threshold as dotted...
plt.plot(np.ma.masked_where(below, x), np.ma.masked_where(below, y1), 'b--')
plt.plot(np.ma.masked_where(below, x), np.ma.masked_where(below, y2), 'g--')
# Plot lines above threshold as solid...
plt.plot(np.ma.masked_where(above, x), np.ma.masked_where(above, y1), 'b-')
plt.plot(np.ma.masked_where(above, x), np.ma.masked_where(above, y2), 'g-')
plt.show()
![введите здесь описание изображения](https://i.stack.imgur.com/4IUji.png)
person
Joe Kington
schedule
14.02.2012