[英]ggplot2 facet_grid() strip_text_x() different colours based on factor
有没有一种方法可以为ggplot2的facet_grid中的构面涂上名称或去除背景的颜色(不是实际网格的背景,正如本文已回答的那样: 使用facet_grid有条件地更改面板背景? )?
在以下示例中:
#create simple dataframe for plotting
xy <- data.frame(x = rep(1:10, times=3), y = rep(10:1, times=3), type = rep(LETTERS[1:2], each=5), type2 = rep(LETTERS[3:5], each=10), category = rep(c("control", "exp", "control"), each=10))
xy
#create base plot
plot <- ggplot(data = xy)+
geom_point(aes(x = x, y = y))+
facet_grid(type ~ type2)
#plot base plot
plot
有没有一种方法可以根据类别变量为主题的文本或背景着色(strip.text.x = element_text(size = 11,face =“ bold”))(?strip.background.x?) ,我上面已指定的数据框中的“类别”,因此所有控件都有一条红色的条带,所有的exp-绿色的一条)?
提前致谢!
PS我实际上想做的是呈现生物实验的结果:
每个基因有两个箱形图以显示变异性; 基因名称在地带
网格的背景是白色或灰色,灰色表示控制基因
我想使用标题中的文本颜色来表示该基因在我的实验中是否有意义(我需要在同一图中显示经过验证的基因和未经验证的基因)
@Roland教我解决这个问题上的grid
图形对象:
根据他的建议,您可以( hackyly )遍历复杂的grob
对象并随意更改元素(但请记住, ggplot
设计是出于非常充分的理由而将这些决定从您手中ggplot
-您可能会做出一些错误的图形设计选择!)。
尝试找出以下内容的工作方式,您将可以对其进行扩展以更改其他所有方式。 $gp
基本上与base
绘图的par
选项的grid
等效。
gplot <- ggplotGrob( plot )
nms <- lapply( gplot$grobs , function(x) names( x[]$children ) )
grbs <- which( sapply( lapply( nms , function(x) grepl( "strip.background.rect" , x ) ) , any ) == 1 )
cl <- c("#2b8cbe","#fc9272","#2b8cbe")
for ( i in 1:length(grbs) ){
col <- cl[i]
i <- grbs[i]
gplot$grobs[[i]]$children[[1]][]$gp$fill <- col
}
require(gridExtra)
grid.arrange( gplot )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.