幾個月前,我需要刪除由ggplot2分面圖生成的一個條。我發現,有人已經問this question,答案工作得很好:刪除一個軸上的strip.background:沒有圖層
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")
今天,我試圖重新生成一些數字,用這個代碼,它沒有工作讓我吃驚。顯然,使用ggplotGrob
進行grob,修改其內容並將其轉換回ggplot2
對象不再有效。
我對如何在這裏繼續有點無知。關於爲什麼這段代碼不再工作的任何想法?
我懷疑包gridExtra
可能是罪魁禍首。在我的工作機器上,這個代碼的工作原理是,這個軟件包版本是0.9.1,但是在我的筆記本電腦中,它不工作,我有2.0.0。由於版本之間的差距很大,我不知道可能與此問題有關的更改。
出色答卷。那麼,在未來版本的ggplot(> 1.0.1)中,沒有ggplot類? – YuppieNetworking
不完全。目前,'ggsave'檢查一個'ggplot'對象。 ggplot grob(即'ggplotGrob(a)')之後的對象是gtable對象,但不是ggplot對象,因此ggsave失敗。在ggplot的下一個版本中,ggsave將保存gtables。 –