Примечание. В приведенном ниже коде я предполагаю, что каждый график в вашей сетке имеет одинаковую ширину / высоту и использует одинаково расположенные позиции меток.Если это не так, вам придется самостоятельно регулировать позиции.
Добавление оси x к main.plot
:
library(gtable)
# create additional row below main plot
# height may vary, depending on your actual plot dimensions
main.plot.x <- gtable_add_rows(main.plot, heights = unit(20, "points"))
# optional: check results to verify position of the new row
dev.off(); gtable_show_layout(main.plot.x)
# create x-axis labels as a text grob
x.axis.grob <- textGrob(label = x.breaks,
x = unit(seq(0, 1, length.out = length(x.breaks)), "npc"),
y = unit(0.75, "npc"),
just = "top")
# insert text grob
main.plot.x <- gtable_add_grob(main.plot.x,
x.axis.grob,
t = nrow(main.plot.x),
l = 1,
r = ncol(main.plot.x),
clip = "off")
# check results
dev.off(); grid.draw(main.plot.x)
Вы можете сделать то же самое для оси Y:
# create additional col
main.plot.xy <- gtable_add_cols(main.plot.x, widths = unit(20, "points"), pos = 0)
# create y-axis labels as a text grob
y.breaks <- c("a", "b", "c") # placeholder, since this wasn't specified in the question
y.axis.grob <- textGrob(label = y.breaks,
x = unit(0.75, "npc"),
y = unit(seq(0, 1, length.out = length(y.breaks)), "npc"),
just = "right")
# add text grob into main plot's gtable
main.plot.xy <- gtable_add_grob(main.plot.xy,
y.axis.grob,
t = 1,
l = 1,
b = nrow(main.plot.xy) - 1,
clip = "off")
# check results
dev.off(); grid.draw(main.plot.xy)
(Обратите внимание, что приведенный выше порядок оси Xпосле которой ось Y не должна переключаться вслепую. Если вы добавляете строки / столбцы, рекомендуется часто использовать gtable_show_layout()
, чтобы проверять последние размеры gtable-объектов и убедиться, что вы вставляете новые пометки в нужные ячейки.)
Наконец, давайте добавим некоторый буфер со всех сторон, чтобы надписи и границы графиков не обрезались:
final.plot <- gtable_add_padding(main.plot.xy,
padding = unit(20, "points"))
dev.off(); grid.draw(final.plot)