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:
- ersetzen
df$y
mitdf$z
- Plot nur die ersten
n
Werte vondf$x
unddf$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.
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
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
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