For the following sample df
df = data.frame(x = c(2,3,4),y = c(4,5,6),group.a= c("1","1","2"),group.b = c("a","b","b"))
I want to just add a horizontal line in-between the y axis facet grids and after browsing different posts here I have tried using the panel.border = element_rect()
argument however that gives me all four borders (top, right, bottom, left)
ggplot(df,aes(x=x,y=y)) facet_grid(group.a~group.b) theme_minimal()
theme(legend.position = "bottom",
legend.title = element_blank(),
legend.direction = "horizontal",
legend.margin = margin(-20,0,0,0),
panel.grid = element_blank(),
panel.border = element_rect(color = "black", fill = NA, size = .5)
axis.text.x = element_blank(),
axis.line.y = element_line(size = .5),
axis.line.x = element_line(size = .5),
strip.placement = "outside")
Is there a way to just have the bottom and left border of the panel borders? Thanks!
CodePudding user response:
There aren't any theme elements that fit the bill here; you would need custom annotations. Fortunately, annotation_custom
applies to each panel, so this can be done with a couple of lines of code
library(ggplot2)
df = data.frame(x = c(2,3,4),y = c(4,5,6),
group.a= c("1","1","2"),group.b = c("a","b","b"))
ggplot(df,aes(x=x,y=y))
facet_grid(group.a~group.b)
geom_point(col = "white")
theme_minimal()
annotation_custom(grid::linesGrob(y = c(0, 0), gp = grid::gpar(lwd = 3)))
annotation_custom(grid::linesGrob(x = c(0, 0), gp = grid::gpar(lwd = 3)))
theme(panel.grid = element_blank(),
strip.placement = "outside",
axis.text.x = element_blank())