【问题标题】:How to apply cross-hatching to a polygon using the grid graphical system?如何使用网格图形系统将交叉影线应用于多边形?
【发布时间】:2014-09-29 22:51:52
【问题描述】:

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)

我如何对 grid 图形系统的 grid.polygon() 函数绘制的多边形应用类似的交叉影线:

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

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

【问题讨论】:

  • 这是不可能的。但是可以通过 gridSVG (grid.patternFill)
  • @baptiste -- 很高兴知道。来自您,我将其视为+ /定义。也感谢指向该 gridSVG 函数的指针。
  • 我从来没有真正尝试过,而且我认为这是相对较新的。这是一个例子,stat.auckland.ac.nz/~paul/Talks/London2013/barchart/barchart.R
  • @baptiste 不幸的是,我需要在 pdf 中使用它,所以我可能只需将我的多边形转换为光栅,并将其用作掩码从另一个光栅图像中提取图案(如this Paul Murrel R-Journal article)。如果我朝那个方向发展,您的 gridExtra::rpatternGrob 可能会有所帮助。
  • 就个人而言,我会尝试将 svg 转换为 pdf,也许 some recent tools 甚至 Inkscape 都可以做得不错。

标签: r graphics r-grid


【解决方案1】:

这是一个改编自 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")

也允许更复杂的 grobs,因为 svg 负责剪辑。

【讨论】:

  • 交叉阴影条形图 是的! :-) +1
  • 不知何故对我不起作用,R 版本 3.3.0 和网格 3.3.0,gridSVG 1.5-0
  • @baptiste 你知道如何将它保存为 PDF(不是 SVG)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多