Several functions in R's base graphical system, including rect()
and polygon()
, support cross-hatching via their angle=
and density=
arguments:
x = c(0, 0.5, 1, 0.5)
y = c(0.5, 1, 0.5, 0)
par(mar=c(0,0,0,0))
plot.new()
polygon(x, y, angle=45, density=10)

How might I apply similar cross-hatching to a polygon drawn by the grid graphical system's grid.polygon()
function:
library(grid)
grid.newpage()
grid.polygon(x,y)

I've looked in the documentation for ?grid.polygon
and ?gpar
, and have skimmed through Paul Murrel's book on R graphics, and have so far come up empty. Am I missing something obvious? If not, is there some simple hack which will make this possible?
Here's an example with gridSVG adapted from Paul Murrell's presentation
library(gridSVG)
library(grid)
x = c(0, 0.5, 1, 0.5)
y = c(0.5, 1, 0.5, 0)
grid.newpage()
grid.polygon(x,y, name="goodshape")
pat <- pattern(linesGrob(gp=gpar(col="black",lwd=3)),
width = unit(5, "mm"), height = unit(5, "mm"),
dev.width = 1, dev.height = 1)
# Registering pattern
registerPatternFill("pat", pat)
# Applying pattern fill
grid.patternFill("goodshape", label = "pat")
grid.export("test-pattern.svg")

more complex grobs are allowed as well, since svg takes care of the clipping.

来源:https://stackoverflow.com/questions/26110160/how-to-apply-cross-hatching-to-a-polygon-using-the-grid-graphical-system