Изменить формат заголовка фасета для ggplot facet_wrap

Возьмите график, созданный следующими данными, со следующим кодом:

library(dplyr)

dd<-data.frame(matrix(0,36,1))
dd$drug<-c("x","x","x","x","x","x","x","x","x","y","y","y","y","y","y","y","y","y","z","z","z","z","z","z","z","z","z","w","w","w","w","w","w","w","w","w")
dd$prev<-c(10,11,12,11,12,13,12,13,14,10,11,12,11,12,13,12,13,14,10,11,12,11,12,13,12,13,14,10,11,12,11,12,13,12,13,14)
dd$country<-c("a","a","a","b","b","b","c","c","c","a","a","a","b","b","b","c","c","c","a","a","a","b","b","b","c","c","c","a","a","a","b","b","b","c","c","c")
dd$year<-c(15,16,17,15,16,17,15,16,17,15,16,17,15,16,17,15,16,17,15,16,17,15,16,17,15,16,17,15,16,17,15,16,17,15,16,17)
dd<-dd[,-1]

dd <- dd %>%
  group_by(drug) %>%
  arrange(country) %>%
  ungroup()

ggplot(dd,aes(x=factor(year),y=prev,fill = factor(country,levels=c("a","b","c")),pos="dodge"))+
  geom_col(col = "black",size=0.25,pos=position_dodge(0.9)) +
  facet_wrap(~factor(drug, levels(factor(dd$drug))[c(2,1,3,4)]),strip.position="bottom",as.table=T,scales="free_x")+
  scale_fill_manual(values = c("a" = "white",
                           "b" = "lightskyblue2",
                           "c" = "lightpink"),
                guide = F)+
  scale_x_discrete(name="Year",labels=c(2015,2016,2017))+
  scale_y_continuous(name="Prevalence (%)")+
  theme_classic()

введите здесь описание изображения

Я хочу переместить, сделать следующее, но не могу найти способ:

1- переместите год по оси X каждой грани над полем с названием грани 2- удалите рамку вокруг названия грани 3- увеличьте расстояние между 2 верхними и 2 нижними гранями

Результат должен быть примерно таким, как показано здесь: введите здесь описание изображения

Большое спасибо!!! Марко


person MarcoD    schedule 14.03.2018    source источник


Ответы (1)


Отметьте ?theme и прочитайте все варианты strip.*. Релевантными являются размещение и фон. Для интервала есть panel.spacing.

ggplot(mtcars, aes(factor(am))) +
  geom_bar() +
  facet_wrap(~cyl, strip.position = "bottom", nrow = 2, scales = "free") +
  theme_classic() +
  theme(strip.placement = "outside",
        strip.background = element_blank(),
        panel.spacing.y = unit(2, "lines"))

введите здесь описание изображения

person Brian    schedule 14.03.2018