В этом примере я добавил границу к трем графикам:
library(ggplot2)
library(patchwork)
theme_border <- theme_gray() +
theme(plot.background = element_rect(fill = NA, colour = 'black',
size = 1, linetype = "dashed"))
ggplot() +
ggplot() +
ggplot() +
plot_layout(ncol=1, guides = "collect") +
plot_annotation(title = "Pred Sp", theme = theme_border)

Created on 2024-04-18 with reprex v2.0.2
Название сюжета внутри. Можно ли разместить его за границей? Кроме того, можно ли нарисовать границу со скругленными углами?





Мы можем использовать patchwork::wrap_elements() для создания графиков с рамкой, а затем добавить к ним заголовок.
I am not sure how to make the border corners rounded (easily).
library(ggplot2)
library(patchwork)
theme_border <- theme_gray() +
theme(plot.background = element_rect(fill = NA, colour = 'black',
linewidth= 1, linetype = "dashed"))
wrap_elements(ggplot() +
ggplot() +
ggplot() +
plot_layout(ncol=1, guides = "collect")+
plot_annotation(theme = theme_border)) +
plot_annotation(title = "Pred Sp")

Created on 2024-04-18 with reprex v2.0.2
Вот один хакерский вариант, который использует annotation_custom для имитации границы панели с закругленными углами, используя grid::roundrectGrob для пустого ggplot, а затем использует patchwork::inset_element для добавления патча к вашим трем графикам:
library(ggplot2)
library(patchwork)
ggplot() +
annotation_custom(
grid::roundrectGrob(
r = unit(0.025, "snpc"),
gp = grid::gpar(
lty = "dashed", lwd = 1, fill = NA
)
)
) +
coord_cartesian(clip = "off") +
theme_void() +
theme(plot.title = element_text(margin = margin(b = 5.5))) +
labs(title = "Pred Sp") +
inset_element(
ggplot() +
ggplot() +
ggplot() +
plot_layout(ncol = 1, guides = "collect"),
left = 0, right = 1,
top = 1, bottom = 0,
on_top = FALSE
)

Я понял. Используя grid::gpar(lty = "dashed", lwd = 1, fill = NA, col = "gray")
Большой. Ага. grid это немного другое.
Это хорошее решение, но как изменить цвет границы? roundrectGrob не принимает аргумент цвета