When I use grid.rect to print a multi-coloured grid, it is incredibly slow 
compared to a single colour grid, or even a two colour grid.

I've set out some simplified examples below. This is something I run literally 
thousands of times a day, so I would greatly appreciate any hints on how I 
might improve the speed???

library(grid)
pushViewport(viewport(
    width = unit(100, "native"),
    height = unit(100, "native"),
    xscale = c(0, 100),
    yscale = c(0, 100),
    ))
pushViewport(viewport(
    x = unit(10, "native"),
    y = unit(10, "native"),
    width = unit(100, "native"),
    height = unit(200, "native"),
    xscale = c(0, 100),
    yscale = c(0, 200),
    just = c("left", "bottom"),
    angle = 10))
system.time(grid.rect(x = unit(rep(1:100, 200) , "native"),
    y = unit(rep(1:200, each = 100), "native"),
    width = unit(1, "native"),
    height = unit(1, "native"),
    gp = gpar(col = NA,
                fill = "lightblue")
))
system.time(grid.rect(x = unit(rep(1:100, 200) , "native"),
    y = unit(rep(1:200, each = 100), "native"),
    width = unit(1, "native"),
    height = unit(1, "native"),
    gp = gpar(col = NA,
                fill = rgb(1, 0, 0, 1:20000/40000))
))

My times for the two plots are:
   user  system elapsed 
   0.61    0.30    0.92 
vs
  user  system elapsed 
   0.08    0.36   24.39 

The time it takes to calculate the colours clearly doesn't explain the 
difference:
system.time(rgb(1, 0, 0, 1:20000/20000))
   user  system elapsed 
      0       0       0 

Even if I do a two coloured grid, it finishes as quickly as the single coloured 
one, so my first interpretation is that the function finds the colours fairly 
quickly, e.g.

system.time(grid.rect(x = unit(rep(1:100, 200) , "native"),
    y = unit(rep(1:200, each = 100), "native"),
    width = unit(1, "native"),
    height = unit(1, "native"),
    gp = gpar(col = NA,
                fill = c("lightblue", "red"))
))

   user  system elapsed 
   0.51    0.18    0.70

Best regards,
Mikkel
> sessionInfo()
R version 2.12.0 (2010-10-15)
Platform: i386-pc-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_Ireland.1252  LC_CTYPE=English_Ireland.1252   
[3] LC_MONETARY=English_Ireland.1252 LC_NUMERIC=C                    
[5] LC_TIME=English_Ireland.1252    

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods  
[8] base     

loaded via a namespace (and not attached):
[1] tools_2.12.0

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to