2017-03-20 8 views
2

Ich habe zwei Arrays, t und x, t ist die unabhängige Variable und x wird als eine Funktion von t berechnet.Verschiedene Farben für verschiedene Wertebereiche

Ich kann sie leicht plotten, zB

from pylab import * 
t = linspace(o, 2*pi, 201) 
x = sin(t) 
plot(t, x) 

aber was ich möchte ist anders, weil in meinem Bereich, wenn abs(x)>0.9 die Ausfallwahrscheinlichkeit steigt von 0,000001% bis 99,999999% Ich mag würde zu Zeichnen Sie in leuchtendem Rot die Teile der Kurve, wo ich das wahrscheinliche Versagen meines Systems habe.

Ich kann mir zwei mögliche Lösungen vorstellen.

  • Plot zwei maskierter Arrays
  • spielen Tricks mit Farbkarten

aber ich weiß nicht, ob es anders ist, bessere Möglichkeiten und aber ich weiß nicht, wie eine Lösung zu implementieren. ..

+0

[Edit: falsch eingeben gedrückt vor dem Abschluss; edit2: entfernt den np. Da Sie bereits importiert haben *] Eine schnelle und schmutzige Lösung besteht darin, ein zweites Diagramm über das bereits erstellte zu legen, indem Sie ausnutzen, dass Matplotlib keine Nan-Werte plotten wird: nach den 4 Zeilen, die Sie geschrieben haben (wobei ich angenommen habe, dass 'o = 0' ;-)) können Sie hinzufügen: 't [abs (x) <0.9] = nan; Plot (t, x, 'r') '. –

Antwort

4

Die Funktion plot von Matplotlib unterstützt keine Colormaps. Dies lässt uns die Option "zwei maskierte Arrays plotten" - was gut ist.

Die einfachste Möglichkeit besteht darin, eine neue Zeile über dem gesamten Diagramm zu zeichnen, die nur die Punkte enthält, die eine Bedingung erfüllen.

import numpy as np; np.random.seed(1) 
import matplotlib.pyplot as plt 

x = np.arange(100) 
y = np.abs(np.cumsum(np.random.rand(100)-0.5))/4. 
y1 = np.copy(y) 
y1[y1 < 0.7] = np.nan 

plt.plot(x,y, linewidth=1.4) 
plt.plot(x,y1, linewidth=2) 

plt.show() 

enter image description here

Verwandte Themen