2010-01-11 4 views
21

Ich zeichne kumulative Verteilungsfunktionen, mit einer großen Anzahl von Datenpunkten. Ich zeichne ein paar Zeilen auf der gleichen Parzelle, die mit Markern gekennzeichnet sind, da sie in Schwarz-Weiß gedruckt werden. Was ich möchte, sind Marker, die in der x-Dimension gleichmäßig verteilt sind. Was ich bekomme, ist ein Marker pro Datenpunkt (und die Anzahl der Punkte, die sie alle überlappen)Zeichnen mit weniger Markierungen als Datenpunkte (oder eine bessere Möglichkeit, CDFs zu plotten?) [Matplotlib oder allgemeine Hilfe zum Plotten]

Ich bin mir nicht sicher, ob es mein Verständnis ist, wie man gut plant, oder nur ein Mangel an Verständnis Matplotlib. Ich kann keine Einstellung für die Markerfrequenz finden.

Eine einfache Lösung für eine Zeile wäre, jeden N-ten Wert von der Zeile zu nehmen und diese als separate Zeile mit linestyle = '' zu verwenden, aber ich möchte, dass die Markierungen vertikal ausgerichtet sind und die anderen x Arrays haben unterschiedliche Längen.

# in reality, many thousands of values 
x_example = [ 567, 460, 66, 1034, 275, 26, 628, 99, 287, 157, 705, 421, 1093, \ 
    139, 204, 14, 240, 179, 94, 139, 645, 670, 47, 520, 891, 450, 56, 964, \ 
    1728, 99, 277, 356, 1628, 745, 364, 88, 112, 810, 816, 523, 401, 89,  \ 
    278, 917, 370, 53, 39, 90, 853, 356 ] 
x = sort(x_example) 
y = linspace(0,1,len(x)) 

ax = subplot(1,1,1) 
plots[w] = ax.plot(x,y, marker='o') 
+0

Verwandte Lösung für arclength Markerabstand: http://stackoverflow.com/questions/17406758/plotting-a-curve-with-equidistant-arc-length-markers –

Antwort

31

Sie können plot(x,y,marker='o',markevery=5) tun jeden fünften Punkt zu markieren, aber ich glaube nicht, dass jeder integrierte Unterstützung ist Markierungen Abständen bei noch für die Einstellung. Sie könnten sich für die x-Orte entscheiden, an denen Sie die Marken haben möchten, z. numpy.searchsorted um herauszufinden, auf welche Datenpunkte die Positionen fallen, und interpolieren Sie dann zwischen den benachbarten Punkten, um die y-Koordinaten zu finden.

+0

Nun, das ist sicherlich schöner, als meine Vorgehensweise gewesen wäre. Zeit zum Suchen gesucht! –

+0

Alternativ unterstützt das Marketing eine Float-Eingabe, bei der die Marker in ungefähr gleichen Abständen entlang der Linie angeordnet sind; Die Entfernung entlang der Linie zwischen den Markierungen wird durch Multiplizieren der Anzeigekoordinatenentfernung der Achsenbegrenzungsfelddiagonale mit dem Wert "http://matplotlib.org/api/lines_api.html#matplotlib.lines.Line2D.set_markeevery" bestimmt – Erik

Verwandte Themen