2016-09-02 5 views
2

ich habe folgende einfache data.table:Gestapelte Balkendiagramm mit data.table und plotly

  date  user    time 
1: 2016-04-25 3533f254 2.21666667 secs 
2: 2016-05-02 e627fa24 1.45833333 secs 
3: 2016-05-02 451872fe 5.08333333 secs 
4: 2016-05-02 105826aa 42.75000000 secs 
5: 2016-05-02 9a527a36 122.78333333 secs 
6: 2016-05-09 451872fe 89.82500000 secs 
7: 2016-05-09 9a527a36 3.06000000 secs 
8: 2016-05-09 cbbc1b3a 0.03014352 secs 
9: 2016-05-16 451872fe 0.55000000 secs 
10: 2016-05-16 9a527a36 0.45000000 secs 

Wie kann ich ein gestapeltes Balkendiagramm dieser Art von data.table erstellen plotly mit (vielleicht data.table mit - oder plotly -spezifische Funktionalität)? Die tatsächlichen Daten haben viel mehr Reihen von Daten, Benutzern und Zeiten. Die X-Achse sollte dem Datum entsprechen, die Y-Achse der Zeit und die Balken sollten Benutzerstapel sein.

Der typische Weg, um diese Art von barchart in plotly zu tun, so etwas wie

p1 <- plot_ly(x = x1, y = y1, type = "bar") 
p2 <- add_trace(p1, x = x2, y = y2) 
p3 <- add_trace(p2, x = x3, y = y3) 
p4 <- layout(p3, barmode = "stack") 
p4 

aber in diesem Fall der Angabe jeden x, y-Gruppe manuell aufgrund der Anzahl von Datenzeilen nicht machbar zu sein scheint.

Probeneingang:

dt <- as.data.table(structure(list(date = structure(c(1L, 2L, 2L, 2L, 2L, 3L, 3L, 
3L, 4L, 4L), .Label = c("2016-04-25", "2016-05-02", "2016-05-09", 
"2016-05-16", "2016-05-23", "2016-05-30", "2016-06-06", "2016-06-13", 
"2016-06-20", "2016-06-27", "2016-07-04", "2016-07-11", "2016-07-18", 
"2016-07-25", "2016-08-01", "2016-08-08", "2016-08-15", "2016-08-22", 
"2016-08-29"), class = "factor"), user = list("3533f254", "e627fa24", 
    "451872fe", "105826aa", "9a527a36", "451872fe", "9a527a36", 
    "cbbc1b3a", "451872fe", "9a527a36"), time = structure(c(2.21666666666667, 
1.45833333333333, 5.08333333333333, 42.75, 122.783333333333, 
89.825, 3.06, 0.0301435185185185, 0.55, 0.45), units = "secs", class = "difftime")), .Names = c("date", 
"user", "time"), class = "data.frame", row.names = c(NA, -10L 
))) 

Antwort

0

Leider haben die anderen Antworten nicht funktioniert. Die einfachste Lösung war die gestapeltes Balkendiagramm mit ggplot2 zu erstellen und dann konvertiert plotly mit:

(ggplot(data = dt, aes(date, time, fill=user)) + geom_bar(stat="identity")) %>% ggplotly()

3

Zuerst Ihre user Spalte ist eine Liste aus irgendeinem Grund, so lassen wir das beheben:

dt[, user := unlist(user)] 

Jetzt habe ich nie gearbeitet mit plotly, so dass ich weiß nicht, was das Ergebnis sollte sein, aber das wird replizieren, was Sie beschrieben haben, was Sie tun möchten:

dt[, {if (.GRP == 1) 
     plot_ly(x = date, y = time, type = 'bar') 
     else 
     add_trace(x = date, y = time) 
    }, by = user] 

layout(barmode = "stack") 
+0

Ich habe versucht, diese und andere Variationen und es brach vollständig plotly Diagramm, aber ich war in der Lage eine Abhilfe finden ggplot2 mit . – ruser9575ba6f

Verwandte Themen