Haoyang Mi
Haoyang Mi

Reputation: 55

Unable to customize strip in facet_grid

I am trying to customize the strip in facet_grid function. My graph currently looks like: enter image description here

I successfully changed the background of strip to purple, however, I could not change the border color to black, even though I set the color to 'black' in the function.

Also, I want the space between text and the rectangle to be larger so that it will looks nicer. How should I achieve this?

My codes looks like:

plot.density <- ggplot(df_densityWindow, aes(x = idx, y = density,     color = factor(location))) + 
geom_bar(stat = 'identity', fill = 'white') + 
facet_grid(marker ~ case, scales = 'free') +
theme(strip.background = element_rect(colour="red", fill="#CCCCFF")) +
scale_color_manual(name = 'Regions',values = c("#F26969", "#02f527",'#F2F2C6')) +
background_grid(major = 'y', minor = "none") + # add thin horizontal lines 
xlab('Index') +
ylab(expression(paste('Density/', mm^2, ))) +
theme(axis.title = element_text(size = 28)) +
theme(axis.text = element_text(size = 26)) +
theme(legend.text = element_text(size = 16)) +
theme(legend.title = element_text(size = 18)) +
panel_border() # and a border around each panel
plot(plot.density)

If necessary, the data could be downloaded here: data Thank you!

Upvotes: 0

Views: 812

Answers (1)

teunbrand
teunbrand

Reputation: 37933

Your colour specification for strips works without error for me. The spacing between the strip text and box can be increased by setting the margin argument at the strip.text theme:

ggplot(iris, aes(Sepal.Width, Sepal.Length)) +
  geom_point() +
  facet_grid(Species ~ rev(Species)) +
  theme(strip.background = element_rect(colour="red", fill="#CCCCFF"),
        strip.text = element_text(margin = margin(10, 10, 10, 10)))

enter image description here

Possible debug strategy:

  1. Reproduce code above

1A. If that doesn't work, check if your ggplot versions is ~3.2-ish

1B. If that does work, proceed to 2.

  1. Try to remove and place back lines of plotting to see where the error occurs

I'm particularly unfamiliar with panel_border() and background_grid(), so you could try those first.

EDIT: Plot based on data and code provided

ggplot(data, aes(x = idx, y = density, colour = factor(location))) +
  geom_col(fill = "white") +
  scale_color_manual(name = 'Regions',values = c("#F26969", "#02f527",'#F2F2C6')) +
  facet_grid(marker ~ case, scales = "free") +
  xlab('Index') + 
  ylab(expression(paste('Density/', mm^2, ))) +
  theme(strip.background = element_rect(colour = "red", fill = "#CCCCFF"),
        strip.text = element_text(margin = margin(10, 10, 10, 10)),
        axis.title = element_text(size = 28),
        axis.text  = element_text(size = 26),
        legend.text = element_text(size = 16),
        legend.title = element_text(size = 18),
        # Improvised based on missing functions
        panel.grid.major.x = element_blank(),
        panel.grid.major.y = element_line(colour = "grey90"),
        panel.background = element_rect(fill = "white", colour = NA),
        panel.border = element_rect(colour = "grey90", fill = NA)) 

enter image description here

Upvotes: 1

Related Questions