2016-06-26 6 views
0

Ich habe ein Skript, das ich geschrieben habe, das Daten analysiert, einen Wert (zwischen 0 und 2) für jedes Datenelement erzeugt, einige Daten entfernt basierend auf einem Algorithmus, wiederholt dann die Analyse und Generierung von Werten. Bei jedem Schritt der Datenentfernung erzeugt es ein kumulatives Frequenzhistogramm der Datenprotokolle, um die Spikes in bestimmten Bereichen der erzeugten Werte sichtbar zu machen, wobei die y-Achse von 0 zu 1 geht (was 0% bis 100% bedeutet) x-Achse geht von 0 nach 2 (der Bereich der möglichen Werte), so dass eine steile Steigung in dem Liniendiagramm eine große Anzahl von Werten über die spezielle Domäne anzeigt, in der die steile Steigung auftritt, wie in diesem frequency histogram example. (Beachten Sie die Spitzen im Histogramm auf die Steigung im kumulativen Diagramm.)Kumulatives Häufigkeits-Histogramm in Pyplot zeichnet keine vollständige Grafik für nullwertige Daten auf

Das Problem, das ich habe, ist, dass wenn ich meine Grafiken erzeuge, das kumulative Frequenzhistogramm von Daten, die nur Nullen für seine Werte generiert hat, sein sollte Gerade Linie über die Spitze bei y=1, um anzuzeigen, 100% der Zahlen haben einen Wert von Null für diese bestimmte Handlung, aber stattdessen bekomme ich eine Linie bei , die nur von x=0 bis x=0.5 geht, wie in diesem graph sehen. Ich brauche die Linie, um den gesamten Weg bei y=1, von x=0 bis x=2 zu gehen. Hier

ist der Code, der die Plots erzeugt:

# Calculate histogram and bins 
hist_, bins_ = np.histogram(e.real, bins = 500, normed=0) 
cuml = np.cumsum(hist_) 
# Plot and normalize data range by dividing values 
plt.plot(bins_[:-1], np.divide(cuml,float(max(cuml))) , label=str(rem_) + ' removed', marker = markr.next(), markevery = 9) 
# Limit axis ranges to possible values 
plt.xlim(0, 2) 
plt.ylim(0, 1) 

Die e.real ist ein Listenobjekt, das die generierten Werte hält, ist hier der Wert davon, die während der Aufzeichnung der Graph oben verlinkten protokolliert wurde:

200 removed 
[ 2. 0. 2. 0. 2. 0. 2. 0. 2. 0. 2. 0. 2. 0. 2. 0. 2. 0. 
    2. 0. 2. 0. 2. 0. 2. 0. 2. 0. 2. 0. 2. 0. 2. 0. 2. 0. 
    2. 0. 2. 0. 2. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
    0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
    0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
    0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
    0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
    0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
    0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
    0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
    0. 0. 0.] 
300 removed 
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
    0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
    0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
    0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
    0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] 
382 removed 
[ 0.] 

Wie Sie in den protokollierten Werte und die Grafik sehen, die bei 200 entfernt der graph visualisiert, dass etwa 80% der n Zahlen haben einen Wert von Null (angezeigt durch die Linie über y=0.9 beginnend bei x=0) und der Rest hat einen Wert von 2 (angezeigt durch die Darstellung von y=0.9 bis y=1 bei x=2). In den Parzellen von 300 entferntund382 entfernt, zeigen die Protokolle, dass 100% der Werte Null sind, und das Diagramm soll, dass bei x=0 beginnend mit einer Linie über y=1 bestätigen, anstatt die kurze Linie zu zeigen, dass nur geht zu x=0.5.

(Hinweis: 300 entfernt und 382 entfernt die gleiche grafische Darstellung haben und überlappt die kurze Linie zu bilden; Die Überlappung ist das richtige Verhalten)

Irgendwelche Ideen, wie meine Linie Länge beheben? Jede Hilfe wird geschätzt.

+0

Für die '' '300 removed''' Datensatz, eine Folge von bin Angabe anstelle der Anzahl der Bins Kanten kann die Grafik aussehen wie du wünschst. Ich habe es nicht auf den anderen Datensätzen versucht. Scheint so, als ob Sie für alle Datensätze die gleichen Bin-Kanten wünschen. '' 'bins = np.linspace (0,2, 500)' '' dann '' 'h, b = np.histogram (Daten, bins = Bins, normed = 0)' '' – wwii

Antwort

1

Versuchen Sie, die Range-Option in np.histogram mit

hist_, bins_ = np.histogram(e.real, bins = 500, range = (0, 2), normed=0) 
Verwandte Themen