如何使用网格图形系统将交叉影线应用于多边形?

时间:2014-09-29 22:51:52

标签: r graphics r-grid

R基本图形系统中的一些功能,包括rect()polygon(),通过其angle=density=参数支持交叉影线:

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)

enter image description here

如何将类似的交叉影线应用于由网格图形系统grid.polygon()函数绘制的多边形:

library(grid)
grid.newpage()
grid.polygon(x,y)

enter image description here

我查看了?grid.polygon?gpar的文档,并浏览了Paul Murrel关于R图形的书,并且到目前为止已经空白了。我错过了一些明显的东西吗如果没有,是否有一些简单的黑客可以使这成为可能?

1 个答案:

答案 0 :(得分:21)

以下是改编自Paul Murrell's presentation

的gridSVG的示例
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")

enter image description here

允许更复杂的grob,因为svg负责裁剪。

enter image description here