[R] How to fill irregular polygons with patterns?

Ortiz, John OrtizJ at si.edu
Fri Nov 18 19:03:58 CET 2011


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 



More information about the R-help mailing list