Hi, Two possible routes I can suggest:
1- export the plot in svg format, which supports natively the use of filling patterns, e.g. http://www.w3.org/TR/SVG/images/pservers/pattern01.svg It's possible that the gridSVG package could help you automate the process of "grid.garnish()-ing" the grobs; last time I looked I didn't succeed. Otherwise, manual editing or a software like Inkscape can do the trick. 2- grid.raster can help you use a polygon shape as a mask for another picture. For example, png("mask.png"); grid.circle(gp=gpar(fill="black")); dev.off() png("pattern.png"); xy = expand.grid( x = seq(0,1, length=20), y=seq(0,1, length=20)) ; with(xy, grid.points(x, y, pch=21, gp=gpar(col="red", fill="blue", lwd=2), def="npc")) dev.off() library(png) m = readPNG("mask.png", native=FALSE) p = readPNG("pattern.png", native=FALSE) pattern <- matrix(rgb(p[,,1],p[,,2],p[,,3]), nrow=dim(p)[1]) mask <- matrix(rgb(m[,,1],m[,,2],m[,,3]), nrow=dim(m)[1]) pattern[mask == "#FFFFFF"] <- "#FFFFFF" grid.raster(pattern) HTH, baptiste On 19 November 2011 07:03, Ortiz, John <ort...@si.edu> wrote: > > Hi, > > I'm looking the best way to fill irregular polygons with patterns, > Something like the function grid.pattern do, but my case is with > irregular polygons. > > Whit this script I can get it, but I'm looking for an "elegant" solution.. > > library(grid) > > grid.polygon(x=c(0.2, 0.8, 0.6, 0.6, 0.8, 0.2), > y=c(0.2, 0.2, 0.3, 0.5, 0.7,0.7), > gp=gpar(fill="grey", alpha=0.9)) > tmp=seq(0.225,0.7,0.075) > for(i in 1:length(tmp)) { > grid.abline(intercep=tmp[i], > slope=0, units="npc", > range=c(0.21,0.79), > gp=gpar(lty=c("F8","2"), lwd=1.1)) > } > tmp2=seq(0.265,0.685,0.075) > for(i in 1:length(tmp2)) { > grid.abline(intercep=tmp2[i], > slope=0, units="npc", > range=c(0.225,0.775), > gp=gpar(lty="F8", lwd=1.1, col="red")) > } > > grid.polygon(x=c(0.8, 0.6, 0.6, 0.8), > y=c(0.2, 0.3, 0.5, 0.7), > gp=gpar(fill="white", col="white")) > > grid.polygon(x=c(0.2, 0.8, 0.6, 0.6, 0.8, 0.2), > y=c(0.2, 0.2, 0.3, 0.5, 0.7,0.7), > gp=gpar(fill="transparent")) > > ### other example > > > grid.polygon(x=c(0.2, 0.8, 0.6, 0.6, 0.8, 0.2), > y=c(0.2, 0.2, 0.3, 0.5, 0.7,0.7), > gp=gpar(fill="yellow", alpha=0.8)) > > grid.points(x=runif(500, min=0.21, max=0.79), > y=runif(500, min=0.21, max=0.69), > default.units="npc", pch=c(20,21), > gp=gpar(cex=c(0.3, 0.5, 0.6), alpha=0.7)) > > grid.polygon(x=c(0.8, 0.6, 0.6, 0.8), > y=c(0.2, 0.3, 0.5, 0.7), > gp=gpar(fill="white", col="white", > lwd=0, alpha=1)) > > grid.polygon(x=c(0.2, 0.8, 0.6, 0.6, 0.8, 0.2), > y=c(0.2, 0.2, 0.3, 0.5, 0.7,0.7), > gp=gpar(fill="transparent", alpha=1)) > > > Thanks in advance, > > John > ______________________________________________ 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.