ggplot2中的许多主题元素只有.x或.y扩展名,只能在一个轴上删除/修改某些内容. strip.background没有strip.background.x相同的,如下所示.
如何strip.background仅从一个轴上删除文本和构面标签?
a <- ggplot(mtcars, aes(mpg, hp)) +
geom_point() +
facet_grid(cyl~gear)
a + theme(strip.text.y = element_blank(),
strip.background.x = element_blank())
## > a + theme(strip.text.y = element_blank(), strip.background.x = element_blank())
## Error in (function (el, elname) :
## "strip.background.x" is not a valid theme element name.
Run Code Online (Sandbox Code Playgroud)
library(ggplot2)
a <- ggplot(mtcars, aes(mpg, hp)) +
geom_point() +
facet_grid(cyl~gear)
strip.remover <- function(ggp, what="x") {
require(gridExtra)
zeroGrob <- function() {
g0 <- grob(name="NULL")
class(g0) <- c("zeroGrob",class(g0))
g0
}
g <- ggplotGrob(ggp)
g$grobs <- lapply(g$grob, function(gr) {
if (any(grepl(paste0("strip.text.", what),names(gr$children)))) {
gr$children[[grep("strip.background",names(gr$children))]] <- zeroGrob()
gr$children[[grep("strip.text",names(gr$children))]] <- zeroGrob()
}
return(gr)
}
)
class(g) = c("arrange", "ggplot",class(g))
g
}
strip.remover(a, "y")
Run Code Online (Sandbox Code Playgroud)

这是一种删除相关条带的方法,
library(grid) # for the grid functions
g <- ggplotGrob(a)
keep <- !grepl("strip-right", g$layout$name)
g$grobs <- g$grobs[keep]
g$layout <- g$layout[keep, ]
grid.newpage()
grid.draw(g)
Run Code Online (Sandbox Code Playgroud)
至少对于ggplot2版本2.0.0.如果设置strip.text.x=或strip.text.y=以element_blank()它消除文字和特定轴的背景.
a + theme(strip.text. = element_blank())
Run Code Online (Sandbox Code Playgroud)