2016-07-29 15 views
3

Ich Plotten zwei Schritt dient dazu, die R-Schnittstelle den Raum zwischen ihnen zu plotly und Schattierungen verwenden, etwa so:bedingte Verschattung in plotly

df <- structure(list(datetime = structure(c(1469869200, 1469871000, 
1469872800, 1469874600, 1469876400, 1469878200, 1469880000, 1469881800, 
1469883600, 1469885400, 1469887200, 1469889000, 1469890800, 1469892600, 
1469894400, 1469896200, 1469898000, 1469899800, 1469901600, 1469903400, 
1469905200, 1469907000, 1469908800, 1469910600), tzone = "Europe/Berlin", class = c("POSIXct", 
"POSIXt")), ya = c(0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 5, 
5, 5, 7, 7, 7, 7, 5, 2, 0, 0), yb = c(0, 0, 1, 2, 3, 2, 2, 2, 
2, 2, 1, 1, 2, 3, 4, 6, 8, 8, 8, 8, 8, 4, 1, 0)), class = "data.frame", row.names = c(NA, 
-24L), .Names = c("datetime", "ya", "yb")) 

df %>% 
    plot_ly(x=datetime, y=ya, line = list(shape = "hv")) %>% 
    add_trace(x=datetime, y=yb, line = list(shape = "hv"), fill = "tonexty") 

die mir folgendes Bild ergibt:

enter image description here

gibt es eine Möglichkeit, ich kann:

  • ändern die Farbe der Schattierung unabhängig von der Farbe der Linie?
  • machen die Farbe der Schattierung eine Funktion davon, ob der Unterschied zwischen den zwei Linien positiv oder negativ ist?
+0

Bitte fügen Sie die Bibliotheken, die Sie verwendet haben (zB dplyr, tidyverse , lubridate etc), damit andere Ihren Code erfolgreich ausführen können – Nova

Antwort

3

schaffe ich es in ggplot2 zu bauen und dann zu plotly mit ggplotly() konvertieren.

Durch separates Erstellen der Linien und der Rechtecke dazwischen können Sie die bedingte Färbung hinzufügen.

Code:

ggplot(df) + 
    geom_step(aes(x = datetime, y = ya), colour = "red") + # Create the ya line 
    geom_step(aes(x = datetime, y = yb), colour = "blue") + # Create the yb line 
    geom_rect(aes(xmin = datetime,    # Create rectangles strarting at every datetime 
       xmax = datetime + minutes(30), # It should reach untill the next datetime 
       ymin = ifelse(ya > yb, yb, ya), # Lower bound is the lowest of ya and yb 
       ymax = ifelse(ya > yb, ya, yb), # Upper bound is highest of ya and yb 
       fill = ya > yb))    # Colour the rectangles based on condition 

ggplotly() 

Ergebnis:

enter image description here

Durch die text Ästhetik und die tooltip Option im ggplotly Aufruf verwenden, können Sie zwicken, was im Finale in den Hover zeigt nach oben Plotplot. Zum Beispiel dieser Code:

ggplot(df, aes(x = datetime)) + 
    geom_step(aes(y = ya, text = paste("ya: ",ya,", yb: ",yb, sep = ""), group = 1), colour = "red") + 
    geom_step(aes(y = yb, text = paste("ya: ",ya,", yb: ",yb, sep = ""), group = 1), colour = "blue") + 
    geom_rect(aes(xmin = datetime, 
       xmax = datetime + minutes(30), 
       ymin = ifelse(ya > yb, yb, ya), 
       ymax = ifelse(ya > yb, ya, yb), 
       fill = ya > yb, 
       text = paste("ya: ",ya,", yb: ",yb, sep = ""))) 

ggplotly(tooltip = c("x","text")) 

Würden Sie geben Ihnen Tooltips die Zeit und sowohl die ya und yb Werte wie so angezeigt wird. enter image description here

+0

Danke, das funktioniert! Leider aus Gründen des Verstehens verstehen einige Aspekte von ggplotly-Plots für mich nicht richtig - die Hover zum Beispiel sind alle vermasselt. Irgendeine Chance, das in reiner Ploty zu tun? – RoyalTS

+0

Meine Ploty-Erfahrung besteht darin, ein ggplot-Plot zu erstellen und ggplotly aufzurufen, also keine Ahnung von einer reinen Plot-Lösung. Aber Sie können zwicken, was in den Hover Tooltips auftaucht, ich füge ein Beispiel hinzu. –