gpt4 book ai didi

r - 添加透明窗口/锁孔ggplot2(网格)

转载 作者:行者123 更新时间:2023-12-02 07:33:49 25 4
gpt4 key购买 nike

有时,使用向图像添加灰色半透明图层,然后在该图层中切出一个锁孔以突出显示下面图像的特定部分的技术会很有帮助。这是来自 youtube vide 的示例:

enter image description here

我有时会用绘图来执行此操作,但使用 Inkscape 添加半透明图层,然后使用橡皮擦在该图层上切一个洞。这 (a) 看起来不够专业 (b) 需要额外的时间和单独的程序,以及 (c) 可能会降低质量。

我想在 R 中做到这一点。我问的是 ggplot2,因为这是我选择的工具,但我认为任何网格答案都会很好(我知道基地可能有一个非常不同的方法)。

这是一个 MWE,我在其中添加了一个 geom_rect 来显示我们想要切割锁孔/窗口的位置:

ggplot(mtcars, aes(mpg, wt)) + 
geom_point(size=3) +
geom_rect(mapping=aes(xmin=20, xmax=25,
ymin=3, ymax=3.3), color="black", alpha=.01)

如何使用 R 绘制如下所示的图:

enter image description here

最佳答案

事实证明,您可以使用 grid 包中的 grid.path(...) 来完成此操作。阅读documentation了解如何创建带孔的路径。

library(gridExtra)
library(ggplot2)

ggp <- ggplot(mtcars, aes(mpg, wt)) + geom_point(size=3)
grid.newpage()
grid.draw(arrangeGrob(ggp))
grid.path(c(0,0,1,1,.48,.48,.62,.62),
c(0,1,1,0,.43,.50,.50,.43),
id=rep(1:2, each=4),
rule="evenodd",gp=gpar(fill="black", alpha=0.6))

注意:grid.draw(...)grid.path(...) 位于 grid 包中; arrangeGrob(...) 位于 gridExtra 包中。加载gridExtra会导致加载grid。感谢@MartinBel 提出的编辑建议。

回应 @BrandonBertelsen 评论:grid.path(...) 与形状无关;您只需提供坐标即可。

center <- c(x=0.55,y=0.48)
r <- 0.1
circle <- do.call(rbind,lapply(seq(0,2*pi,length=36),
function(th)c(x=r*cos(th),y=r*sin(th))))
circle <- data.frame(circle)
circle$x <- circle$x + center["x"]
circle$y <- circle$y + center["y"]

ggp <- ggplot(mtcars, aes(mpg, wt)) + geom_point(size=3)
grid.newpage()
grid.draw(arrangeGrob(ggp))
grid.path(c(0,0,1,1,circle[,1]),
c(0,1,1,0,circle[,2]),
id=c(1,1,1,1,rep(2,nrow(circle))),
rule="evenodd",gp=gpar(fill="black", alpha=0.6))

由于绘图窗口的纵横比,“圆”是一个椭圆形。

<小时/>

进一步阅读:It’s Not What You Draw, It’s What You Don’t Draw作者:Paul Murrell,发表于 R 杂志

关于r - 添加透明窗口/锁孔ggplot2(网格),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21369550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com