2016-10-13 2 views
4

Ich bin mir nicht sicher, ob dies möglich ist, aber hier ist, was ich tun möchte. Ich möchte die Daten in einem Plotplot aktualisieren, indem ich aus einem Dropdown-Menü auswähle.plottly: Aktualisieren von Daten mit Dropdown-Auswahl

Als einfaches Beispiel, lässt ich einen Datenrahmen übernehmen haben

df <- data.frame(x = runif(200), y = runif(200), z = runif(200)) 

aus dem ich df$x und df$y in einem Streudiagramm verwenden. Zwei Szenarien der Datenmanipulation würde Ich mag erreichen ein Dropdown mit:

  1. ersetzen df$y mit df$z
  2. Plot nur die ersten n Werte von df$x und df$y

Ich schaute auf die beiden folgenden Beispiele , die ich leicht reproduzieren kann: https://plot.ly/r/dropdowns/

Allerdings habe ich keine Ahnung, wie das inf übergeben werden soll Beschreibung der zu plottenden Daten basierend auf der Dropdown-Auswahl. Für Szenario 2, z.B. Ich habe es mit args = list("data", df[1:n,]) versucht, die nicht funktionierte.

Für Szenario 1 scheint der (einzige?) Weg zu gehen (entsprechend den Beispielen) die Spuren zu verstecken bzw. zu zeigen. Ist das auch für Szenario 2 der einzige Weg?

Irgendwelche alternativen Ideen?

Update 1: In reproduzierbares Beispiel

So, hier ist ein Beispiel, das zu erreichen, was Ich mag in Szenario würde 1.

require(plotly) 
df <- data.frame(x = runif(200), y = runif(200), z = runif(200)) 
Sys.setenv("plotly_username"="xxx") #actual credentials replaced 
Sys.setenv("plotly_api_key"="xxx") #actual credentials replaced 

p <- plot_ly(df, x = df$x, y = df$y, mode = "markers", name = "A", visible = T) %>% 
    add_trace(mode = "markers", y = df$z, name = "B", visible = T) %>% 
    layout(
    title = "Drop down menus - Styling", 
    xaxis = list(domain = c(0.1, 1)), 
    yaxis = list(title = "y"), 
    updatemenus = list(
     list(
     y = 0.7, 
     buttons = list(
      list(method = "restyle", 
       args = list("visible", list(TRUE, TRUE)), 
       label = "Show All"), 

      list(method = "restyle", 
       args = list("visible", list(TRUE, FALSE)), 
       label = "Show A"), 

      list(method = "restyle", 
       args = list("visible", list(FALSE, TRUE)), 
       label = "Show B"))) 
    )) 

plotly_POST(p) 

Ergebnis hier: https://plot.ly/~spietrzyk/96/drop-down-menus-styling/ Dies beruht auf dem Beispiel aus https://plot.ly/r/dropdowns/

Ich frage mich jedoch, ob man die zu plottenden Daten übergeben könnte, anstatt Änderungen an derauszulösenEigenschaft einzelner Spuren.

Das einzige, was ich versuchte, war die folgende:

p <- plot_ly(df, x = df$x, y = df$y, mode = "markers", name = "A", visible = T) %>% 
    layout(
    title = "Drop down menus - Styling", 
    xaxis = list(domain = c(0.1, 1)), 
    yaxis = list(title = "y"), 
    updatemenus = list(
     list(
     y = 0.7, 
     buttons = list(
      list(method = "restyle", 
       args = list("y", df$y), 
       label = "Show A"), 
      list(method = "restyle", 
       args = list("y", df$z), 
       label = "Show B"))) 
)) 

Ergebnis hier: https://plot.ly/~spietrzyk/98/drop-down-menus-styling/ Dieser Ansatz kann nicht funktionieren, da die Daten von df$z nicht an das Netz gebucht (https://plot.ly/~spietrzyk/99/).

Also habe ich mich gefragt, ob es sowieso ist, die zu plottenden Daten zu manipulieren, basierend auf der Dropdown-Auswahl, darüber hinaus alle Traces plotten und dann die visible-Eigenschaft durch Dropdown-Auswahl.

+0

Bitte versuchen Sie einen [reproduzierbaren Beispiel], um (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) zeigt uns genau das, was Ihr Code Hat gemacht. Es ist nicht klar, wie du "Plotly" anriefst oder wo du diese Argumente feststeckst. Dies wird es Ihnen leichter machen, Ihnen zu helfen. – MrFlick

+0

Um ehrlich zu sein, bin ich mit der R-API nicht so vertraut, daher mag mein Kommentar von begrenztem Nutzen sein, aber das ist ein Feature in der aktiven Entwicklung. Sie können Daten direkt über den update- menus-Befehl übergeben, aber es gibt auch ein neues 'frame'-Konzept, um dies zu erleichtern. Die "animation" -Dokumente für "plotly.js" haben einige Beispiele: https://plot.ly/javascript/animations/#defining-named-frames-with-plotlyaddframes Leider weiß ich nicht, ob Frames über R erreichbar sind API noch nicht (siehe: https://github.com/plotly/plotly.js/issues/1014), weshalb dies keine befriedigende Antwort ist. – Ricky

+0

Und FWIW, hier ist ein etwas weniger ambitioniertes Beispiel, das Daten direkt über die Befehle von update-menus weiterleitet: http://codepen.io/rsreusser/pen/majpkb?editors=0010 Entschuldigung, dass es nicht über die R-API geht. – Ricky

Antwort

4

Sind Sie danach?

require(plotly) 
df <- data.frame(x = runif(200), y = runif(200), z = runif(200)) 
p <- plot_ly(df, x = ~x, y = ~y, mode = "markers", name = "A", visible = T) %>% 
layout(
    title = "Drop down menus - Styling", 
    xaxis = list(domain = c(0.1, 1)), 
    yaxis = list(title = "y"), 
    updatemenus = list(
    list(
     y = 0.7, 
     buttons = list(
     list(method = "restyle", 
      args = list("y", list(df$y)), # put it in a list 
      label = "Show A"), 
     list(method = "restyle", 
      args = list("y", list(df$z)), # put it in a list 
      label = "Show B"))) 
)) 
p 
Verwandte Themen