2011-12-29 12 views
5

मैं एक R/ggplot2 उपयोग के मामले geom_raster के लिए कॉल करने के लिए लगता है कि है: एक्स पर z के मूल्यों, वाई स्थानों के साथ एक नियमित रूप से कार्तीय ग्रिड। मैं geom_tile का उपयोग कर रहा हूं, और मुझे geom_raster पर स्विच करने से प्रदर्शन सुधार की उम्मीद है। लेकिन मैं एक देख हो रहे हैं नहीं है ...सापेक्ष प्रदर्शन()

यहाँ एक खिलौना उदाहरण है (लेकिन सही आकार के बारे में), base ग्राफ़िक्स का उपयोग:

n <- m <- 200 
x <- 1:n 
y <- 1:m 
f <- function(x, y) 10 * sin(x/n) * cos(y/m) 
z <- outer(x, y, f) 
system.time(image(z)) 

    user system elapsed 
    0.998 0.007 1.023 

यहाँ यह ggplot2 साथ है:

obs <- expand.grid(x=x, y=y) 
obs$z <- as.numeric(as.list(z)) 
require(ggplot2) 
p <- ggplot(obs, aes(x=x, y=y, fill=z)) 
system.time(show(p + geom_tile())) 

    user system elapsed 
    7.328 0.891 8.187 

require(ggExtra) 
system.time(show(p + geom_raster())) 

    user system elapsed 
    7.000 0.637 7.799 

तो, मामूली लाभ, लेकिन जो भी मैं उम्मीद कर रहा था उसके करीब कहीं नहीं। क्या मैं इसे गलत कर रहा हूँ? अग्रिम में बहुत धन्यवाद!

उत्तर

8

आप ggExtra में नवीनतम ggplot2 (dev version, वर्तमान में) से geom_raster, नहीं गाड़ी प्रोटोटाइप का उपयोग करना चाहिए (इस पैकेज अब पदावनत है, Btw)।

ऐसा करने से, मुझे बेहतर परिणाम मिलते हैं, 4.705 बनाम 1.416 (विलुप्त)। काफी सुधार

संपादित करें: यह पता चला है कि ggplot2 में ?geom_raster पहले से ही, एक बेहतर बेंचमार्क प्रदान करता है अपने सिस्टम पर

benchplot(base + geom_raster()) 
     step user.self sys.self elapsed 
1 construct  0.006 0.004 0.010 
2  build  0.887 0.212 1.109 
3 render  0.449 0.119 0.584 
4  draw  0.108 0.005 0.141 
5  TOTAL  1.450 0.340 1.844 
> benchplot(base + geom_tile()) 
     step user.self sys.self elapsed 
1 construct  0.016 0.005 0.026 
2  build  1.031 0.329 1.365 
3 render  1.021 0.297 1.318 
4  draw  0.987 0.041 1.040 
5  TOTAL  3.055 0.672 3.749 
संबंधित मुद्दे