2015-06-17 8 views
6

की साजिश करते समय हाइचार्ट्स बहुत धीमी होती है हम हाइचार्ट्स का उपयोग करते हुए कॉलम ए 1 से लगभग 4000 डेटा पॉइंट प्लॉट करने की कोशिश कर रहे हैं। ए 1 बार के रंग ए 3 नामक दूसरे कॉलम के मानों पर आधारित होते हैं। यदि ए 3 एक पंक्ति पर नकारात्मक है, तो ए 1 के बारे में संबंधित बार लाल होना चाहिए, और सकारात्मक ए 3 रंग हरा देना चाहिए।4000 बार (आरएचएचटीएस)

समस्या यह है कि ग्राफ़ उत्पन्न करने के लिए लगभग 25 सेकंड लगते हैं, और ग्राफ को मुद्रित करने में केवल 20 सेकंड लगते हैं। क्या कोई हमें कोड को ठीक करने और इसे तेज़ी से बनाने में मदद कर सकता है? हमने एनिमेशन और छाया अक्षम करने की कोशिश की, लेकिन इससे बहुत मदद नहीं मिली। यहां कोड है:

fun <- function(){ 

     ## Generate a random data set with roughly 4,000 lines 
     df <- as.data.frame(cbind(x = seq(1:3900), 
           a1 = rnorm(3900, 1000000, 2000000), 
           a2 = abs(rnorm(3900, 1000000, 2000000)), 
           a3 = rnorm(3900, 20000, 30000), 
           a4 = rnorm(3900, 1000, 500), 
           a5 = rnorm(3900, 0.01, 0.02))) 

     ## Modify the data set to assign colors to each bar based on the values 
     ## of a3. Green bars signify positive a3's and red bars signify 
     ## negative a3's 
     df <- df %>% 
      mutate(a6 = cumsum(a3)) %>% 
      mutate(color = ifelse(a3 > 0, 
            "rgba(50,205,50,0.6)", 
            "rgba(223,83,83,0.6)")) %>% 
      mutate(y = a1, 
        a1 = comma_format()(round(a1, 0)), 
        a3 = comma_format()(round(a3, 0)), 
        a4 = comma_format()(round(a4, 4)), 
        a5 = comma_format()(round(a5, 0)), 
        a6 = comma_format()(round(a6, 0)) 
      ) 

     ## Store the data in a list so that it is readable by Highcharts 
     input <- list() 
     input <- lapply(unname(split(df, seq(nrow(df)))), as.list) 

     ## Draw the graph with Highcharts 
     a <- rCharts::Highcharts$new() 
     a$series(data = input, 
       name = "a1 values", 
       type = "column") 
     a$plotOptions(series = list(turboThreshold = 4000)) 
     a$chart(zoomType = "xy", animation = FALSE) 
     a$addParams(width = 1000, height = 400, title = list(text = "The Slow Chart")) 
     a$tooltip(formatter = "#! function() 
      {return 'Date:<b> ' + this.point.x + 
         '</b> <br/>a1 values:<b> ' + this.point.a1 + 
       '</b> <br/>a3 values:<b> ' + this.point.a2 + 
       '</b> <br/>a4 values:<b> ' + this.point.a3 + 
       '</b> <br/>a5 values:<b> ' + this.point.a5 + 
       '</b> <br/>a6 values:<b> ' + this.point.a6} !#") 
     print(a) 
} 

किसी भी मदद की सराहना की जाती है!

+1

4000of चार्ट प्रति सलाखों थोड़ा बहुत ज्यादा नहीं है? मेरा मतलब है कि यदि आपके पास चौड़ाई = 4000 पीएक्स नहीं है, तो आप उन सभी कॉलम को प्रदर्शित करने में सक्षम नहीं होंगे। उदाहरण के लिए 500x500 चार्ट का उपयोग करके, इसे 4 पिक्सेल में एक पिक्सेल में प्रस्तुत करने की आवश्यकता होगी;) वैसे भी, [डेटा ग्रुपिंग] (http://api.highcharts.com/highstock#plotOptions.series.dataGrouping) सुविधा के साथ हाईस्टॉक का उपयोग करने पर विचार करें। –

+0

सुझावों के लिए धन्यवाद! शायद मुझे हाईस्टॉक आज़माएं और देखें कि क्या समस्या हल हो सकती है। एकमात्र चीज जो मैं अभी भी सोच रहा हूं वह यह है कि यह 4000 बार प्लॉट करने में धीमा नहीं होना चाहिए क्योंकि लोग हाइचार्ट्स गैलरी में दिखाए गए अनुसार 1.7 मिलियन डेटा पॉइंट्स प्लॉट करने के लिए हाइचार्ट्स का उपयोग कर सकते हैं, और क्योंकि कुछ वीडियो गेम कुछ और जटिल कर सकते हैं एक सेकंड के मुकाबले इसकी तुलना में। मैं कल हाईस्टॉक्स की कोशिश कर रहा हूं, लेकिन अगर मैं किसी बुरे तरीके से कुछ परिभाषित करता हूं तो मैं उत्सुक हूं। –

+1

** हाईस्टॉक ** में 1.7 मिलियन अंक हैं, हाईस्टॉक नहीं :) हाईस्टॉक में, आप 'डेटा ग्रुपिंग' (कोई सीमा नहीं, लेकिन लगभग 100 000 चिकनी होना चाहिए) का उपयोग करके बहुत से अंक प्लॉट कर सकते हैं। या उदाहरण के लिए 1.7 मिलियन अंक के रूप में, और भी अंक लोड करने के लिए एसिंक्रोनस डेटा लोडिंग का उपयोग करें। –

उत्तर

0

सबसे पहले, कृपया दिखाएं कि आप अपने कोड (dplyr, scales) में कौन से पैकेज का उपयोग कर रहे हैं।

हाईचार्ट्स के लिए boost module है। दुर्भाग्य से rCharts डिफ़ॉल्ट रूप से उस मॉड्यूल को शामिल नहीं करते हैं, इसलिए आपको मैन्युअल रूप से जोड़ने की आवश्यकता है।

दूसरी तरफ। हाईचार्ट्स नामक हाईचार्ट्स के लिए एक नया रैपर है जिसमें इस मॉड्यूल का कार्यान्वयन होता है। इसका उपयोग 3 9 00 कॉलम को चार्ट करने के लिए 1 सेकंड से अधिक नहीं लेते हैं।

highchart2() %>% 
    hc_title(text = "Not so slow chart ;)") %>% 
    hc_subtitle(text = "Thanks boost module") %>% 
    hc_chart(zoomType = "x", animation = FALSE, type = "column") %>% 
    hc_plotOptions(series = list(turboThreshold = 4000)) %>% 
    hc_add_serie(data = input) 

चेक गति/यहाँ:

http://rpubs.com/jbkunst/highcharts-too-slow-when-plotting-4000-bars-rcharts

+0

भयानक, अद्भुत काम! मैं आपको नोबेल पुरस्कार के लिए नामांकित करना चाहता हूं! उस प्रशंसा के लिए – PaeneInsula

+0

@PeneneInsula हाहा ty। लेकिन यह केवल हाईचार्ट्स है, मैं सिर्फ एक रैपरमैन हूं;) – jbkunst

संबंधित मुद्दे