Histogramm mit gestapelten Komponenten

Nehmen wir an, ich habe einen Wert, den ich in den letzten 90 Tagen jeden Tag gemessen habe. Ich möchte ein Histogramm der Werte zeichnen, aber ich möchte dem Betrachter leicht machen, zu sehen, wo sich die Messungen in bestimmten nicht überlappenden Teilmengen der letzten 90 Tage angesammelt haben. Ich möchte dies tun, indem ich jeden Balken des Histogramms in Blöcke "unterteile". Ein Teil für die frühesten Beobachtungen, einer für die jüngsten, einer für die jüngsten.

Das klingt nach einem Job fürdf.plot(kind='bar', stacked=True) aber ich habe Probleme, die Details richtig zu machen.

Folgendes habe ich bisher:

import numpy as np
import pandas as pd
import seaborn as sbn

np.random.seed(0)

data = pd.DataFrame({'values': np.random.randn(90)})
data['bin'] = pd.cut(data['values'], 15, labels=False)
forhist = pd.DataFrame({'first70': data[:70].groupby('bin').count()['bin'],
                         'next15': data[70:85].groupby('bin').count()['bin'],
                         'last5': data[85:].groupby('bin').count()['bin']})

forhist.plot(kind='bar', stacked=True)

Und das gibt mir:

Diese Grafik weist einige Mängel auf:

Die Stangen sind in der falschen Reihenfolge gestapelt.last5 sollte oben sein undnext15 mitten drin. Das heißt Sie sollten in der Reihenfolge der Spalten in gestapelt werdenforhist.Zwischen den Balken befindet sich ein horizontaler AbstandDie x-Achse ist eher mit ganzen Zahlen als mit Werten beschriftet, die die Klassen repräsentieren. Meine "erste Wahl" wäre es, die x-Achse genau so beschriften zu lassen, wie es wäre, wenn ich gerade laufen würdedata['values'].hist(). Meine "zweite Wahl" wäre, die x-Achse mit den "Bin-Namen" beschriften zu lassen, die ich bekommen würde, wenn ich das tätepd.cut(data['values'], 15). In meinem Code habe ich verwendetlabels=False Wenn ich das nicht getan hätte, hätte es die Bin-Edge-Beschriftungen (als Zeichenfolgen) als Balkenbeschriftungen verwendet und diese in alphabetischer Reihenfolge angeordnet, wodurch das Diagramm im Grunde unbrauchbar geworden wäre.

Wie kann man das am besten angehen? Ich habe das Gefühl, dass ich bisher sehr unbeholfene Funktionen benutze.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage