How to apply cross-hatching to a polygon using the grid graphical system?

匿名 (未验证) 提交于 2019-12-03 02:14:01

问题:

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?

回答1:

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.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!