我正在尝试将剪切蒙版应用于 ggplot 中的几何对象,以遮蔽部分数据,但保留轴、网格、其他几何对象和图例的可见性。我不想创建特定的绘图,因此不想使用多边形掩盖绘图的某些部分来解决问题。
这是我想要模仿的设计(蒙版,不一定是主题,我知道如何做):
我可以使用
我的直觉是应该绘制
函数
由于我甚至不能将裁剪掩码应用于整个图形,所以我离我的目标还很远。
如果您能帮助我理解如何应用来自
这是我想要模仿的设计(蒙版,不一定是主题,我知道如何做):
(来源)
另请参阅此示例
有人可能会认为我可以过滤掉未包含在遮罩定义多边形中的数据。但是,虽然对于点可以起作用,并且对于类似于多边形/线的对象也可以起作用,但对于栅格数据则不行(边界将不会完全遵循非垂直或非水平线)。因此,我尝试了以下方法:
library(ggplot2)
library(gridSVG)
library(grImport)
# Create a plot
p <- ggplot(diamonds[1:300,], aes(carat, price)) + geom_point(aes(colour = cut))
# And a clipping mask
pg <- polygonGrob(c(.7, 0, 0, 1, 1),
c(0, .7, 1, 1, 0))
cp <- clipPath(pg)
我可以使用
gridSVG
包来定义一个裁剪蒙版,但是我在将其应用于 ggplot 对象时遇到了困难,即使在使用 ggplotGrob()
提取 grob(参见此处)之后。我无法将裁剪蒙版应用于 grob:g <- ggplotGrob(p) # store the plot as a grob
registerClipPath("mask", cp)
g_clipped <- clipPath(g)
gridsvg(name = "test_c2.svg")
grid.draw(clipPathGrob(g_clipped, cp)$grob)
dev.off()
我的直觉是应该绘制
g_clipped
,但我无法使用grid.draw()
来绘制它,因为它是一个clipPath对象。而且这里写的grid.draw()
行显示了未被遮罩的图形。我想我不太明白clipPath对象的功能。函数
grobify()
听起来可以帮助找到没有使用gridSVG的替代方法,请参见此处的详细信息,但我并不理解这个相当简洁的文档。由于我甚至不能将裁剪掩码应用于整个图形,所以我离我的目标还很远。
如果您能帮助我理解如何应用来自
gridSVG
的裁剪掩码,或者有一个替代方案来将裁剪掩码应用于特定的几何图形,请告诉我。
theme()
有一个panel.ontop
选项,它可以将网格放置在数据层上方。 - Z.Lin