1

I would like to split the title into two parts that are left/right-aligned respectively. The following code creates two textgrobs and uses arrangeGrob() to arrange the plot. But it seems there is no options in arrangeGrob() to align grobs. How can I align grobs1 to the left of the plot and and grobs2 to the right of the plot? Thanks.

 p <- ggplot() grobs1 <- grobTree( gp = gpar(fontsize = 14), textGrob(label = "Left", name = "title1", x = unit(2.5, "lines"), y = unit(0, "lines"), hjust = 0, vjust = 0), textGrob(label = " left", name = "title2", x = grobWidth("title1") + unit(2.5, "lines"), y = unit(0, "lines"), hjust = 0, vjust = 0, gp = gpar(col = "red", fontface = "bold")) ) grobs2 <- grobTree( gp = gpar(fontsize = 14), textGrob(label = "Right", name = "title1", x = unit(0, "lines"), y = unit(0, "lines"), hjust = 0, vjust = 0), textGrob(label = " right", name = "title2", x = grobWidth("title1") +unit(0, "lines"), y = unit(0, "lines"), hjust = 0, vjust = 0, gp = gpar(col = "red", fontface = "bold")) ) gg <- arrangeGrob(p, top = arrangeGrob(grobs1, grobs2, ncol = 2), padding = unit(1, "line")) grid.newpage() grid.draw(gg) 

1 Answer 1

4

Two arguments of textGrob function could be helpful to move the text horizontally: just and hjust. You could try to adjust those values to get what you are after. By the way, I assume that you used the gridExtra package. I have only made some changes in just and hjust of your original code. I might have gone too far to push the right text to the right with hjust = -5, and just = "right" could be sufficient.

library(gridExtra) library(grid) library(ggplot2) p <- ggplot() grobs1 <- grobTree( gp = gpar(fontsize = 14), textGrob(label = "Left", name = "title1", x = unit(2.5, "lines"), y = unit(0, "lines"), just = "left", hjust = 0, vjust = 0), textGrob(label = " left", name = "title2", x = grobWidth("title1") + unit(2.5, "lines"), y = unit(0, "lines"), just = "left", hjust = 0, vjust = 0, gp = gpar(col = "red", fontface = "bold")) ) grobs2 <- grobTree( gp = gpar(fontsize = 14), textGrob(label = "Right", name = "title1", x = unit(0, "lines"), y = unit(0, "lines"), just = "right", hjust = -5, vjust = 0), textGrob(label = " right", name = "title2", x = grobWidth("title1") +unit(0, "lines"), y = unit(0, "lines"), just = "right", hjust = -5, vjust = 0, gp = gpar(col = "red", fontface = "bold")) ) gg <- arrangeGrob(p, top = arrangeGrob(grobs1, grobs2, ncol = 2), padding = unit(1, "line")) grid.newpage() grid.draw(gg) 

enter image description here

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you! I wish there were a cheat sheet for manipulating grobs.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.