ggvis

2015-09-14 13 views
8

के साथ काम करने के लिए इंटरैक्टिव ज़ूमिंग नहीं मिल सकता है, मैं एक ब्रश का उपयोग करके विशेष रूप से ज़ूमिंग में जीजीवी में काम करने के लिए इंटरैक्टिव ज़ूमिंग करने की कोशिश कर रहा हूं। https://github.com/rstudio/ggvis/issues/143 से निर्णय मैंने सोचा कि यह काम करना चाहिए।ggvis

मैं निम्नलिखित चमकदार और ggvis कोड है (पूरी तरह से प्रतिलिपि प्रस्तुत करने योग्य है):

## 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। अभी भी निम्न चुनौतियों है:

  • zoom_brush अंदर मैं ब्रश के निर्देशांकों को प्राप्त है, लेकिन पिक्सेल में डोमेन समन्वय नहीं प्रणाली साजिश के समन्वय प्रणाली। मैं पिक्सेल को डोमेन पैमाने पर कैसे अनुवाद कर सकता हूं? डी 3 में मैं बस ट्रांसफॉर्म फ़ंक्शंस स्केल करने के लिए रेंज का उपयोग कर सकता हूं, लेकिन मुझे नहीं लगता कि ये ggvis (वेगा के माध्यम से) में कैसे उपलब्ध हैं।
  • हैंडल_ब्रश फ़ंक्शन केवल on_move ईवेंट हैंडलर सेट करने का समर्थन करता है। इस मामले में मैं ब्रश खत्म होने पर ज़ूम को ट्रिगर करना चाहता हूं, इसलिए ब्रश के संदर्भ में ऑन-हाउसअप ईवेंट। मुझे डर है कि अभी यह संभव नहीं है?
  • केवल जब मैं क्लैंप सेट करता हूं = TRUE क्या मुझे एक प्रभावी ज़ूम मिलता है। नहीं, डोमेन के बाहर के बिंदु अभी भी दिखाए गए हैं और केवल अक्ष को नए डोमेन पर सेट किया गया है। क्या इसके लिए कोई आसान फिक्स है? या क्या मुझे डेटासेट को एक प्रतिक्रियाशील बनाना चाहिए, और ब्रश द्वारा सेट किए गए डोमेन के आधार पर इसे सबसेट करना चाहिए?

मैं निम्नलिखित आर संस्करण और पैकेज संस्करण चलाता हूं। ggvis अभी तक काफी चालाक पैमाने अंकों में से अनदेखी करने के लिए प्रकट नहीं होता है:

> 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

आप 'ggvis' शायद [इस उदाहरण] (http://shiny.rstudio.com/gallery/plot-interaction-zoom.html पर भरोसा करने की जरूरत नहीं है) काम करेगा? प्रतिक्रिया के लिए – JasonAizkalns

+0

@ जेसन धन्यवाद। मुझे इस विकल्प से अवगत है, और यह सवाल विशेष रूप से ggvis के लिए लक्षित है। –

उत्तर

1

मैं आप अपने डेटा सबसेट तक की जरूरत है। मेरे लिए निम्नलिखित server.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') 

})