ggplot2 facet wrap:仅在第一行的y轴刻度

HAV*_*AVB 5 r facet ggplot2

是否可以将y轴添加到构面包装中,但仅限于第一行,如屏幕截图所示?

我的情节代码:

library(ggplot2)

mydf <- read.csv('https://dl.dropboxusercontent.com/s/j3s5sov98q9yvcv/BPdf_by_NB')

ggplot(data = mydf) +
  geom_line(aes(x = YEARMONTH, y = NEWCONS, group = 1), color="darkseagreen3")  +
  geom_line(aes(x = YEARMONTH, y = DEMOLITIONS, group = 1), color = "black") +
  theme_minimal() + 
  labs(title="New constructions Vs Demolitions (2010 - 2014)\n") +
  theme( axis.line = element_blank(),
         axis.title.x = element_blank(),
         axis.title.y = element_blank(),
         axis.text.x = element_blank(),
         axis.text.y = element_blank()) +
  facet_wrap(~ NB) 
Run Code Online (Sandbox Code Playgroud)

结果:

ggplot2 facet wrap

(我手动为我要放置比例的地方添加了一个图例)

jor*_*ran 5

这个想法来自这个答案.

p <- ggplot(data = mydf) +
    geom_line(aes(x = YEARMONTH, y = NEWCONS, group = 1), color="darkseagreen3")  +
    geom_line(aes(x = YEARMONTH, y = DEMOLITIONS, group = 1), color = "black") +
    theme_minimal() + 
    labs(title="New constructions Vs Demolitions (2010 - 2014)\n") +
    theme( axis.line = element_blank(),
                 axis.title.x = element_blank(),
                 axis.text.x = element_blank()) +
    facet_wrap(~ NB) 
Run Code Online (Sandbox Code Playgroud)

注意theme调用中的更改,以便我们以后可以选择性地删除一些grobs.

library(gtable)
p_tab <- ggplotGrob(p)
print(p_tab)
Run Code Online (Sandbox Code Playgroud)

所以我们想要除去四个左轴项目.有一个gtable_filter使用正则表达式的函数,但是编写我自己的函数更简单,它执行简单的负子集(因为我无法制作正确的正则表达式):

gtable_filter_remove <- function (x, name, trim = TRUE){
    matches <- !(x$layout$name %in% name)
    x$layout <- x$layout[matches, , drop = FALSE]
    x$grobs <- x$grobs[matches]
    if (trim) 
        x <- gtable_trim(x)
    x
}

p_filtered <- gtable_filter_remove(p_tab,name = paste0("axis_l-",5:16),trim=FALSE)

library(grid)
grid.newpage()
grid.draw(p_filtered)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述