Hi Paul Thanks ever so much for this. This should help tremendously. My only reason for using semi-transparent colours was not knowing how to use colorRampPalette. I'm really just looking at white-to-somecolour gradients. My examples weren't meant to be written one on top of the other.
Unlike in the examples, my real-life grids are irregular, with uneven distances between rows, so grid.raster probably isn't an option. Also, in real-life I'm writing the plots to png and pdf files. It was on the png files that I noticed the problem, because these files involve much more data than the pdfs. I'm not sure to what extent the Windows graphics drivers affects the png and pdf drivers? Mikkel --- On Wed, 10/20/10, Paul Murrell <p.murr...@auckland.ac.nz> wrote: > From: Paul Murrell <p.murr...@auckland.ac.nz> > Subject: Re: [R] need for speed on grid.rect > To: "Mikkel Grum" <mi2kelg...@yahoo.com> > Cc: "r-help@r-project.org" <r-help@r-project.org> > Date: Wednesday, October 20, 2010, 2:38 PM > Hi > > I think the problem is that the Windows graphics device is > not great at > semitransparent colours. For example, your code runs > acceptably fast on > my Linux system. > > If your goal is just a colour gradient, then you could > avoid using > semitransparency by calculating the colours yourself, for > example ... > > library(colorspace) > finalColour <- rgb(coords(mixcolor(.5, > > > RGB(1, 0, 0), > > > RGB(t(col2rgb("lightblue"))/255)))) > colourPalette <- colorRampPalette(c("lightblue", > finalColour)) > > ... then just draw one set of rectangles ... > > 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 = > colourPalette(20000)) > )) > > ... or even better, draw the gradient as a raster image > ... > > system.time(grid.raster(matrix(colourPalette(20000), > > > ncol=100, nrow=200, byrow=TRUE))) > > ... which is much faster again. > > Paul > > On 21/10/2010 6:10 a.m., Mikkel Grum wrote: > > 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. > > -- > Dr Paul Murrell > Department of Statistics > The University of Auckland > Private Bag 92019 > Auckland > New Zealand > 64 9 3737599 x85392 > p...@stat.auckland.ac.nz > http://www.stat.auckland.ac.nz/~paul/ > ______________________________________________ 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.