Ответ 1
По крайней мере, для версии ggplot2 версии 2.0.0. если вы установите strip.text.x=
или strip.text.y=
на element_blank()
, он удалит текст и фон для определенной оси.
a + theme(strip.text. = element_blank())
Многие элементы темы в 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.
По крайней мере, для версии ggplot2 версии 2.0.0. если вы установите strip.text.x=
или strip.text.y=
на element_blank()
, он удалит текст и фон для определенной оси.
a + theme(strip.text. = element_blank())
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")
Здесь можно удалить соответствующие полосы,
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)
Такая же идея, но с использованием пакета grid
g <- ggplotGrob(a)
gg <- g$grobs
strip_right.index <- which(grepl('strip-right',g$layout$name))
for(ii in strip_right.index)
gg[[ii]] <- editGrob(getGrob(gg[[ii]],'strip.back'
,grep=TRUE,global=TRUE)
,gp = gpar(fill=NA))
g$grobs <- gg
grid.draw(g)