Sto cercando di ottenere lo zoom interattivo per lavorare su ggvis, più in particolare lo zoom usando un pennello. Giudicando da https://github.com/rstudio/ggvis/issues/143 ho pensato che questo dovrebbe funzionare.Non riesco a ottenere lo zoom interattivo per lavorare con ggvis
Ho il seguente codice lucido e ggvis (è completamente riproducibile):
## 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')
})
Così, non appena un pennello viene disegnato, i domini reattivi è cambiato, che a sua volta cambia il dominio del x scale_numeric
. Se hanno ancora le seguenti sfide:
- All'interno
zoom_brush
ho ottenere le coordinate del pennello, ma nel sistema di pixel della trama sistema di coordinate non coordinata dominio. Come posso tradurre i pixel nella scala del dominio? In d3 posso semplicemente usare l'intervallo per ridimensionare le funzioni di trasformazione, ma non vedo come siano disponibili in ggvis (via vega). - La funzione handle_brush supporta solo l'impostazione di un gestore eventi
on_move
. In questo caso voglio solo attivare lo zoom se il pennello finisce, quindi l'evento onmouseup nel contesto del pennello. Temo che questo semplicemente non sia possibile in questo momento? - Solo quando si imposta clamp = TRUE si ottiene uno zoom efficace. In non, i punti fuori dal dominio sono ancora mostrati e solo gli assi sono impostati sul nuovo dominio. C'è una soluzione facile per questo? O dovrei rendere il set di dati un reattivo, e suddividerlo in base al dominio che è stato impostato dal pennello?
Corro la seguente versione di R e versioni del pacchetto.
> 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
Se non è necessario fare affidamento su 'ggvis' forse [questo esempio] (http://shiny.rstudio.com/gallery/plot-interaction-zoom.html) funzionerebbe? – JasonAizkalns
@jason grazie per il feedback. Sono a conoscenza di questa opzione e questa domanda è specificamente rivolta a ggvis. –