की साजिश करते समय हाइचार्ट्स बहुत धीमी होती है हम हाइचार्ट्स का उपयोग करते हुए कॉलम ए 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)
}
किसी भी मदद की सराहना की जाती है!
4000of चार्ट प्रति सलाखों थोड़ा बहुत ज्यादा नहीं है? मेरा मतलब है कि यदि आपके पास चौड़ाई = 4000 पीएक्स नहीं है, तो आप उन सभी कॉलम को प्रदर्शित करने में सक्षम नहीं होंगे। उदाहरण के लिए 500x500 चार्ट का उपयोग करके, इसे 4 पिक्सेल में एक पिक्सेल में प्रस्तुत करने की आवश्यकता होगी;) वैसे भी, [डेटा ग्रुपिंग] (http://api.highcharts.com/highstock#plotOptions.series.dataGrouping) सुविधा के साथ हाईस्टॉक का उपयोग करने पर विचार करें। –
सुझावों के लिए धन्यवाद! शायद मुझे हाईस्टॉक आज़माएं और देखें कि क्या समस्या हल हो सकती है। एकमात्र चीज जो मैं अभी भी सोच रहा हूं वह यह है कि यह 4000 बार प्लॉट करने में धीमा नहीं होना चाहिए क्योंकि लोग हाइचार्ट्स गैलरी में दिखाए गए अनुसार 1.7 मिलियन डेटा पॉइंट्स प्लॉट करने के लिए हाइचार्ट्स का उपयोग कर सकते हैं, और क्योंकि कुछ वीडियो गेम कुछ और जटिल कर सकते हैं एक सेकंड के मुकाबले इसकी तुलना में। मैं कल हाईस्टॉक्स की कोशिश कर रहा हूं, लेकिन अगर मैं किसी बुरे तरीके से कुछ परिभाषित करता हूं तो मैं उत्सुक हूं। –
** हाईस्टॉक ** में 1.7 मिलियन अंक हैं, हाईस्टॉक नहीं :) हाईस्टॉक में, आप 'डेटा ग्रुपिंग' (कोई सीमा नहीं, लेकिन लगभग 100 000 चिकनी होना चाहिए) का उपयोग करके बहुत से अंक प्लॉट कर सकते हैं। या उदाहरण के लिए 1.7 मिलियन अंक के रूप में, और भी अंक लोड करने के लिए एसिंक्रोनस डेटा लोडिंग का उपयोग करें। –