Ответ 1
Я думаю, вы были близки. У вас были номера строк и столбцов в команде add grob. Ваша новая полоса охватывает столбцы с 4 по 8; то есть смените 10 на 8 в команде add grob.
library(ggplot2)
library(gtable)
library(grid)
p <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
p <- p + facet_grid(. ~ cyl)
z <- ggplotGrob(p)
# New strip at the top
z <- gtable_add_rows(z, z$height[6], pos = 5) # New row added below row 5
# Check the layout
gtable_show_layout(z) # New strip goes into row 6
# New strip spans columns 4 to 8
z <- gtable_add_grob(z,
list(rectGrob(gp = gpar(col = NA, fill = "gray85", size = .5)),
textGrob("Number of Cylinders", gp = gpar(cex = .75, fontface = 'bold', col = "black"))),
t=6, l=4, b=6, r=8, name = c("a", "b"))
# Add small gap between strips - below row 6
z <- gtable_add_rows(z, unit(2/10, "line"), 6)
# Draw it
grid.newpage()
grid.draw(z)
ИЛИ, чтобы добавить новую полосу вправо:
library(ggplot2)
library(gtable)
library(grid)
p <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
p <- p + facet_grid(cyl ~ .)
z <- ggplotGrob(p)
# New strip to the right
z <- gtable_add_cols(z, z$widths[5], pos = 5) # New column added to the right of column 5
# Check the layout
gtable_show_layout(z) # New strip goes into column 6
# New strip spans rows 6 to 10
z <- gtable_add_grob(z,
list(rectGrob(gp = gpar(col = NA, fill = "gray85", size = .5)),
textGrob("Number of Cylinders", rot = -90,
gp = gpar(cex = .75, fontface = 'bold', col = "black"))),
t=6, l=6, b=10, r=6, name = c("a", "b"))
# Add small gap between strips - to the right of column 5
z <- gtable_add_cols(z, unit(2/10, "line"), 5)
# Draw it
grid.newpage()
grid.draw(z)