GOOGLE ADS

Samstag, 23. April 2022

Histogramm der Ereignisdaten

Ich habe folgende Daten:

 start_time end_time duration ic_total mc_total
0 2022-01-01 10:00:00 2022-01-01 19:00:00 9.0 0.0 1.7780003947160878
1 2022-01-02 00:00:00 2022-01-02 10:00:00 10.0 0.0 0.0
2 2022-01-02 17:00:00 2022-01-03 02:00:00 9.0 0.7620001691640255 1.7780003947160594
3 2022-01-03 02:00:00 2022-01-04 12:00:00 34.0 3.810000845820184 4.31800095859623
4 2022-01-07 21:00:00 2022-01-08 06:00:00 9.0 10.287002283714486 1.016000225552034
5 2022-01-16 05:00:00 2022-01-16 20:00:00 15.0 0.0 0.0
6 2022-01-19 04:00:00 2022-01-19 17:00:00 13.0 2.286000507492133 0.5926667982386957
7 2022-01-21 14:00:00 2022-01-22 00:00:00 10.0 1.7780003947160736 0.0
8 2022-01-27 02:00:00 2022-01-27 16:00:00 14.0 14.986003326892735 9.588502128647471

in einem Datenrahmen.

Wie kann ich ein Diagramm mit Balken erstellen, deren Breite durch die Dauerspalte und deren Höhe durch den ic_total-Wert definiert ist und deren Position auf der x-Achse durch die Start- und Endzeit definiert ist?

Dank der Antwort von Riley kann ich die Daten jetzt wie gewünscht plotten, bin aber auf ein weiteres Problem gestoßen! Ich habe ähnliche Daten in separaten Datenrahmen und möchte sie auf demselben Diagramm darstellen. Ich habe folgenden Code:

_, ax = plt.subplots(sharex=False)
sc.Stairs(bdf, "start_time", "end_time", "ic_total").plot(ax,label='Bresser\open')
sc.Stairs(frdf, "start_time", "end_time", "ic_total").plot(ax, label='FR Gauge')
sc.Stairs(hpdf, "start_time", "end_time", "ic_total").plot(ax, label='Highpoint')

Wenn ich den Code ausführe, wird der Plot unten rechts im Screenshot generiert (Abbildung 4). Wenn Sie jede Zeile einzeln ausführen, wird das Treppendiagramm erfolgreich erstellt (Abbildungen 1-3).
Geben Sie hier die Bildbeschreibung ein
Ich habe sharex=False ohne Freude ausprobiert. Ich vermute, dass es eine Art Konflikt mit der x-Achse gibt. Ist es möglich, jede Linie mit ihrer eigenen Achse zu zeichnen, und wird dies das Problem lösen?

Zweite Bearbeitung:

Bei weiteren Nachforschungen scheint die ursprüngliche Antwort doch nicht zu funktionieren. Die Balken sollten eine Breite haben, die durch die Spalte „duration" definiert ist, die die Zeit in Stunden zwischen „start_time" und „end_time" ist. Ist dies eher eine Histogrammfrage?


Lösung des Problems

Klingt für mich nach einem Schrittfunktionsdiagramm, für das Sie verwenden können staircase, das als Teil des Pandas-Ökosystems fungiert.

Angenommen, Ihr Datenrahmen heißt wie dffolgt, wird mit wenig Aufwand ein Diagramm erstellt

import staircase as sc
import matplotlib.pyplot as plt
_, ax = plt.subplots(figsize=(16,4))
sc.Stairs(df, "start_time", "end_time", "ic_total").plot(ax)

Geben Sie hier die Bildbeschreibung ein

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...