本文介绍了在ggplot2对象的现有图层下插入图层的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 给定一个现有的plot对象,可以添加一个图层 UNDERNEATH 一个现有的图层? 例如,在下图中,可以将 geom_boxplot()添加到 P ,这样boxplot显示在下面 geom_point()? ##从以下开始: library(ggplot2) P ##这增加了boxplot,但掩盖了某些点 P + geom_boxplot() 预期产出: #本质上是 ggplot(data = dat,aes(x = id,y = val))+ geom_boxplot()+ geom_point() ##然而,这涉及重新编码所有P(在新图层的点插入之后)。 ##这是我希望避免的。 奖金问题:现有的情节,是否有可能指出在哪里特别插入新层(相对于现有层)? SAMPLE DATA set.seed(1) N id dat 解决方案感谢@baptiste为我指出了正确的方向。要在所有其他图层下插入图层,只需修改plot对象的图层元素即可。 ##例如: P $ layers 红利回答问题: 这个方便的小函数在一个指定的z级别: insertLayer< - function(P,after = 0,...){#P:绘制对象#之后:定位插入新图层的位置,相对于现有图层#...:附加图层,用逗号(,)分隔而不是加号(+)$如果(在之后 if(!length(P $ layers)) P $ layers< - list(...) else P $ layers< - 追加(P $图层,列表(...),之后) return(P)} Given an Existing plot object is it possible to add a layer UNDERNEATH an existing layer?Example, in the graph below, is it possible to add geom_boxplot() to P such that the boxplot appears underneath geom_point()?## Starting from:library(ggplot2)P <- ggplot(data=dat, aes(x=id, y=val)) + geom_point()## This adds boxplot, but obscures some of the pointsP + geom_boxplot()Expected Output:# Which is essentiallyggplot(data=dat, aes(x=id, y=val)) + geom_boxplot() + geom_point()## However, this involves re-coding all of P (after the point insertion of the new layer).## which is what I am hoping to avoid.Bonus question: If there are multiple layers in the existing plot, is it possible to indicate where specifically to insert the new layer (with respect to the existing layers)?SAMPLE DATAset.seed(1)N <- 100id <- c("A", "B")dat <- data.frame(id=sample(id, N, TRUE), val=rnorm(N)) 解决方案 Thanks @baptiste for pointing me in the right direction. To insert a layer underneath all other layers, just modify the layers element of the plot object.## For example:P$layers <- c(geom_boxplot(), P$layers)Answer to the Bonus Question:This handy little function inserts a layer at a designated z-level: insertLayer <- function(P, after=0, ...) { # P : Plot object # after : Position where to insert new layers, relative to existing layers # ... : additional layers, separated by commas (,) instead of plus sign (+) if (after < 0) after <- after + length(P$layers) if (!length(P$layers)) P$layers <- list(...) else P$layers <- append(P$layers, list(...), after) return(P) } 这篇关于在ggplot2对象的现有图层下插入图层的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云! 09-05 20:25