2015-09-14 39 views
8

ggvis'te çalışmak için etkileşimli yakınlaştırma yapmaya çalışıyorum, özellikle bir fırça kullanarak yakınlaştırma. https://github.com/rstudio/ggvis/issues/143 dan bakılırsa bunun işe yarayacağını düşündüm.ggvis ile çalışmak için etkileşimli yakınlaştırma alamıyorum

Aşağıdaki parlak ve ggvis kod (tamamen yeniden üretilebilir) da X alanını değiştiren en kısa sürede bir fırça çekildikçe, reaktif etki değiştirilir Yani

## 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') 
}) 

, scale_numeric. yine de aşağıdaki zorlukları varsa: zoom_brush İçinde

  • Ben fırça koordinatlarını almak, ancak piksel etki alanı koordinat sistemi değil komplo koordinat sistemi. Pikselleri alan ölçeğine nasıl çevirebilirim? D3'te, dönüş fonksiyonlarını ölçeklendirmek için aralığı kullanabilirim ancak bunların ggvis'te (vega ile) nasıl olduğunu göremiyorum.
  • Handle_brush işlevi yalnızca on_move olay işleyicisinin ayarlanmasını destekler. Bu durumda, sadece fırça bittiğinde zumu tetiklemek istiyorum, bu nedenle fırça bağlamında onmouseup olayı. Korkarım ki bu şu anda mümkün değil mi?
  • Yalnızca kelepçe = DOĞRU ayarlandığında, etkili bir yakınlaştırma elde ederim. Aksi halde, alanın dışa vurduğu noktalar hala gösterilir ve sadece eksenler yeni alana ayarlanır. Bunun için kolay bir düzeltme var mı? Veya veri kümesini reaktif hale getirmeli ve fırça tarafından ayarlanmış alana dayanmalı mıyım?

Aşağıdaki R sürümünü ve paket sürümlerini çalıştırıyorum. ggvis henüz ölçek puan üzerinden görmezden kadar zeki görünmüyor:

> 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 
+0

sen http://shiny.rstudio.com/gallery/plot-interaction-zoom.html (ggvis' belki [Bu örnekte] 'güvenmek gerekmiyorsa) çalışır? – JasonAizkalns

+0

@jason Geri bildiriminiz için teşekkür ederiz. Bu seçeneğin farkındayım ve bu soru özellikle ggvis'i hedefliyor. –

cevap

1

Ben verilerinizi subsetine gerektiğini düşünüyorum. Benim için aşağıdaki server.R çalışır:

## server.R 
shinyServer(function(input, output, session) { 

    domains <- reactiveValues(x = c(NA, NA), y = c(NA, NA)) 

    mtcars_reactive <- reactive({ 
    if (anyNA(domains$x)) 
     mtcars 
    else 
     mtcars[mtcars$disp >= domains[["x"]][1] & mtcars$disp <= domains[["x"]][2], ] 
    }) 

    zoom_brush = function(items, page_loc, session, ...) { # plot_loc 
    print(items) 
    message("page_loc") 
    print(page_loc) 
    print(session) 
    domains$x = c(200, 400) 
    } 

    reactive({ 
    mtcars_reactive() %>% 
     ggvis(~disp, ~mpg) %>% 
     layer_points() %>% 
     handle_brush(zoom_brush) 
    }) %>% bind_shiny('graph_plot1', 'ui_plot1') 

}) 
İlgili konular