34
votes

I have the following type of plot and want to keep each strip text above the individual facet box as a "title" of sorts yet not have the default grey background and black border around the strip.background. I color it white which is close to what I want but would like the bottom edge of the strip.background or top edge of panel.border to be black.

enter image description here

library(ggplot2)

ggplot(mtcars, aes(mpg, hp)) + geom_point() +
    facet_wrap(~carb, ncol = 3) + theme_bw() +
    theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        strip.background = element_rect(colour="white", fill="white"),
        panel.border = element_rect(colour = "black"))
3

3 Answers

51
votes

If you set element_blank() for strip.background and keep element_rect(colour="black", fill = NA) for panel.border then top edge of panel.border will be black. As pointed out by @adrien, for panel.background fill should be set to NA to avoid covering of points (already set as default for theme_bw()).

ggplot(mtcars, aes(mpg, hp)) + geom_point() +
  facet_wrap(~carb, ncol = 3) + theme_bw() +
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        strip.background = element_blank(),
        panel.border = element_rect(colour = "black", fill = NA))

enter image description here

12
votes

Setting panel.border might cover your graph unless you also add fill=NA to panel.border :

theme(panel.border = element_rect(fill = NA, colour = "black"))

One can also use:

theme(panel.background = element_rect(fill = NA, color = "black")

source (section "Panel Attributes")

3
votes

You can try:

 strip.background = element_rect(colour=NA, fill=NA),
 panel.border = element_rect(fill = NA, color = "black"))