已向 R 图形引擎(在 R 的开发版本中,可能成为 R 版本 4.1.0)添加了对渐变填充、图案填充、裁剪路径和蒙版的支持。
已向“网格”图形包添加了这些新功能的 R 级接口。
library(grid)
例如,以下代码使用线性渐变填充圆形。
grid.circle(gp=gpar(col=NA, fill=linearGradient()))
下一段代码使用径向渐变填充矩形。
grid.rect(gp=gpar(fill=radialGradient(c("white", "black"),
cx1=.8, cy1=.8, r1=0)))
下一段代码使用灰色菱形图案填充矩形(通过重复在图像中心绘制的单个灰色菱形)。
pat <- pattern(polygonGrob(unit(.5, "npc") + unit(c(-2, 0, 2, 0), "mm"),
unit(.5, "npc") + unit(c(0, 2, 0, -2), "mm"),
gp=gpar(col=NA, fill="grey")),
width=unit(4, "mm"), height=unit(4, "mm"),
extend="repeat")
grid.rect(gp=gpar(col=NA, fill=pat))
以下代码对具有线性渐变填充的圆形应用蒙版。首先,我们展示蒙版本身,这是一个用从黑色到透明的线性渐变填充的矩形(绘制在灰色菱形填充上以显示透明度)。
mask <- rectGrob(gp=gpar(col=NA,
fill=linearGradient(c("black", "transparent"),
x1=.1, y1=.1)))
grid.rect(gp=gpar(col=NA, fill=pat))
grid.draw(mask)
现在,我们通过将视口作为视口定义的一部分来将蒙版应用到具有线性渐变填充的圆形。同样,我们在菱形填充的顶部进行绘制,以显示蒙版的半透明度如何决定圆形的半透明度。
grid.rect(gp=gpar(col=NA, fill=pat))
pushViewport(viewport(mask=mask))
grid.circle(gp=gpar(col=NA, fill=linearGradient()))
popViewport()
最后,下一段代码显示了裁剪路径。我们通过指定一个 grob 作为视口的clip
参数来定义一个圆形裁剪路径,然后绘制上一个图像,该图像被裁剪到圆形裁剪路径。
pushViewport(viewport(clip=circleGrob()))
grid.rect(gp=gpar(col=NA, fill=pat))
pushViewport(viewport(mask=mask))
grid.circle(gp=gpar(col=NA, fill=linearGradient()))
popViewport()
这些新功能有什么用?这就是你发挥作用的地方!让我们知道你可以如何利用这些新功能,以及当前的实现如何帮助或阻碍你。可以在此技术报告中找到有关新功能及其实现方式的进一步讨论和更多详细信息。
到目前为止,新功能仅在部分图形设备上实现:cairo_pdf()
、cairo_ps()
、x11(type="cairo")
、png(type="cairo")
、jpeg(type="cairo")
、tiff(type="cairo")
、svg()
和pdf()
。尽管尚未支持quartz()
或windows()
,但上述几乎所有图形设备都可以在所有主要平台上使用。
实现图形设备的 R 包需要更新并重新安装,即使它们尚未提供对新功能的任何支持,也仅仅是为了不使 R 崩溃。
这项工作部分由 R Studio 向奥克兰大学基金会捐赠的资金资助。