2011-12-29 24 views
5

I geom_raster için çağrı gibi görünen bir R/ggplot2 kullanım durumunda sahiptir: x, z-değerleri y yerleri ile normal bir Kartezyen ızgara. geom_tile kullanıyorum ve geom_raster'a geçişten bir performans artışı bekleniyor. İştegöreceli performansı()

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 

o ggplot2 ile:

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 
Ama burada

base grafikleri kullanarak, bir oyuncak örneği (ama sağ boyutu hakkında) ... birini görmeye görünmüyor

Yani, mütevazi bir kazanç, ama beklediğim şeyin yakınında yok. Yanlış mı yapıyorum? Şimdiden çok teşekkürler!

cevap

8

Sen (bu paket artık önerilmemektedir, btw) ggExtra son ggplot2 (şu anda dev version) den geom_raster değil, arabası prototip kullanmalıdır.

Böyle yaparak daha iyi sonuç alacağım, 4.705 vs. 1.416 (geçen). Oldukça iyileşme.

Düzenleme: ggplot2 yılında ?geom_raster zaten sistemimde, daha iyi bir kriter sunmaktadır çıkıyor

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