Ich versuche, interaktives Zoomen in ggvis zu verwenden, insbesondere beim Zoomen mit einem Pinsel. Nach Meinung von https://github.com/rstudio/ggvis/issues/143 dachte ich, das sollte funktionieren.Interaktives Zoomen funktioniert nicht mit ggvis
Ich habe folgende glänzend und ggvis Code (ist vollständig reproduzierbar):
## ui.R
library(ggvis)
shinyUI(fluidRow(
uiOutput('ui_plot1'),
ggvisOutput("graph_plot1")
))
## server.R
shinyServer(function(input, output, session) {
domains <- reactiveValues(x = c(NA, NA), y = c(NA, NA))
zoom_brush = function(items, session, page_loc, plot_loc, ...) {
domains$x = c(200, 400)
}
plot = reactive({
mtcars %>%
ggvis(~disp, ~mpg) %>%
layer_points() %>%
scale_numeric('x', domain = domains$x, clamp = TRUE) %>%
handle_brush(zoom_brush)
}) %>% bind_shiny('graph_plot1', 'ui_plot1')
})
So, sobald eine Bürste gezogen wird, die Domänen reaktiv verändert wird, was wiederum ändert die Domäne der x scale_numeric
. Wenn nach wie vor folgende Herausforderungen:
- Innen
zoom_brush
erhalte ich die Koordinaten der Bürste, aber in dem Pixelkoordinatensystem des Plots nicht die Domäne-Koordinatensystem. Wie kann ich die Pixel in die Domänenskala übertragen? In d3 kann ich einfach den Bereich verwenden, um Transformationsfunktionen zu skalieren, aber ich sehe nicht, wie diese in ggvis (über Vega) verfügbar sind. - Die handle_brush-Funktion unterstützt nur das Festlegen eines
on_move
-Ereignishandlers. In diesem Fall möchte ich nur den Zoom auslösen, wenn der Pinsel fertig ist, also das onmouseup Event im Kontext des Pinsels. Ich fürchte, das ist im Moment einfach nicht möglich? - Nur wenn ich clamp = TRUE setze bekomme ich einen effektiven Zoom. In diesem Fall werden die Punkte außerhalb der Domäne weiterhin angezeigt, und nur die Achsen werden auf die neue Domäne festgelegt. Gibt es eine einfache Lösung dafür? Oder sollte ich den Datensatz reaktiv machen und ihn basierend auf der Domäne, die vom Pinsel gesetzt wurde, unterteilen?
Ich führe die folgenden R-Version und Paket-Versionen.
> sessionInfo()
R version 3.1.1 (2014-07-10)
Platform: x86_64-apple-darwin10.8.0 (64-bit)
locale:
[1] C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] ggvis_0.4.1 shiny_0.12.0
loaded via a namespace (and not attached):
[1] DBI_0.3.1 R6_2.0.1 Rcpp_0.11.6 assertthat_0.1 digest_0.6.8 dplyr_0.4.1 htmltools_0.2.6 httpuv_1.3.2
[9] jsonlite_0.9.16 lazyeval_0.1.10 magrittr_1.5 mime_0.3 parallel_3.1.1 tools_3.1.1 xtable_1.7-4
Wenn Sie auf [diesem Beispiel] nicht verlassen sich auf 'ggvis' vielleicht (http://shiny.rstudio.com/gallery/plot-interaction-zoom.html) würde funktionieren? – JasonAizkalns
@jason danke für die Rückmeldung. Ich bin mir dieser Möglichkeit bewusst und diese Frage richtet sich speziell an ggvis. –