我有一组数据框,用它们制作了
在我的实际情况中,我有几个区域地图,每个地图都有自己的单位和比例尺,这就是为什么我不能只是分面,而是需要独立构建每个地图的原因。
以下是我加载的包和数据的简化版本:
在
我的当前解决方法是制作一个空的
ggplot
列表,并使用cowplot
组装成一个图形网格。然后,我需要添加共享标题、副标题和说明。我希望以这种方式完成,使得这些标签具有与labs
创建的标签相同的主题元素(大小、字体等),而不是cowplot::draw_label
。在我的实际情况中,我有几个区域地图,每个地图都有自己的单位和比例尺,这就是为什么我不能只是分面,而是需要独立构建每个地图的原因。
以下是我加载的包和数据的简化版本:
library(tidyverse)
library(cowplot)
dfs <- list(
adults_no_diploma = structure(list(
tract = c("09003405100", "09003405200", "09003405300", "09003405401", "09003405402", "09003405500", "09003405600", "09003405700", "09003405800", "09003405900"),
value = c(0.08, 0.108, 0.095, 0.099, 0.105, 0.103, 0.161, 0.279, 0.056, 0.055)),
row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame")),
severe_cost_burden = structure(list(
tract = c("09003405100", "09003405200", "09003405300", "09003405401", "09003405402", "09003405500", "09003405600", "09003405700", "09003405800", "09003405900"),
value = c(0.128, 0.147, 0.165, 0.1, 0.151, 0.11, 0.179, 0.184, 0.14, 0.038)),
row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame"))
)
我正在使用一个自定义主题(简化版):
theme_georgia <- function(...) {
theme_gray(base_family = "Georgia", ...) +
theme(plot.title = element_text(face = "bold"))
}
plots <- dfs %>%
imap(~{
ggplot(.x, aes(x = value)) +
geom_density() +
ggtitle(.y) +
theme_georgia()
})
gridded <- plot_grid(plotlist = plots, nrow = 1)
在
cowplot
注释vignette之后,我可以使用ggdraw() + draw_label("Socio-economic measures")
制作标题,并手动设置字体大小,但我更喜欢以某种方式定义该标签为一个标题;也就是说,主题将应用plot.title
中的所有内容,创建副标题和说明文字也是如此。我的当前解决方法是制作一个空的
ggplot
,并使用labs
为标题和副标题,对于说明文字也是这样,然后使用cowplot::plot_grid
在垂直方向上堆叠它们。title_gg <- ggplot() +
labs(title = "Socio-economic measures", subtitle = "By census tract, 2016") +
theme_georgia()
plot_grid(title_gg, gridded, ncol = 1, rel_heights = c(0.15, 1))
这种解决方法还可以,但我更喜欢使用draw_label
的整洁性和对齐性。我可以逐个添加这些主题元素来模拟标题:
title_theme <- ggdraw() +
draw_label("Socio-economic measures",
fontfamily = theme_georgia()$text$family,
fontface = theme_georgia()$plot.title$face, x = 0.05, hjust = 0)
plot_grid(title_theme, gridded, ncol = 1, rel_heights = c(0.2, 1))
draw_label
,或者以某种方式告诉draw_label
,这个东西是一个标题,应该获得标题主题元素,而这另一个东西是一个副标题,等等。我想象中有一些魔法可以做到这一点:ggdraw() +
draw_label("Socio-economic measures", theme_georgia()$plot.title_elements)
或者:
ggdraw() +
draw_label("Socio-economic measures", type = "title") + theme_georgia()