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

Jos*_*ien 18 graphics r 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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

library(grid)
grid.newpage()
grid.polygon(x,y)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我看了说明文档中?grid.polygon?gpar,并通过保罗具有Murrel的书在R图形有脱脂和迄今拿出空.我错过了一些明显的东西吗 如果没有,是否有一些简单的黑客可以使这成为可能?

bap*_*ste 21

这是一个改编自Paul Murrell演讲的 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")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

因为svg负责裁剪,所以也允许更复杂的凹凸.

在此输入图像描述


akr*_*ica 1

从 R 4.1.0 开始,grid 获得了pattern允许重复任何其他 grob 作为填充的功能:


library(grid)

# Note that using absolute coordinates like "cm" for
# x and y does not work
cross <- grobTree(
  linesGrob( x=unit(c(0,1),"npc"), y=unit(c(0,1),"npc")),
  linesGrob( x=unit(c(0,1),"npc"), y=unit(c(1,0),"npc")))

cpat <- pattern(cross,
  width = unit(1,"cm"),
  height = unit(1,"cm"),
  extend = "repeat")

rect <- rectGrob(
  width = unit(5, "cm"),
  height = unit(5, "cm"),
  gp= gpar(fill = cpat))

grid.newpage()
grid.draw(rect)
Run Code Online (Sandbox Code Playgroud)

具有交叉影线图案的正方形图

(这个答案得到了这篇博客文章的帮助)