You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为列表中数据框的ggplot添加专属标题并并排展示?

解决ggplot2列表绘图标题与多图并排问题

一、给每个图表添加对应DataFrame名称的标题

核心问题是遍历列表时未正确传递DataFrame的名称,用purrr::imap()可同时获取列表元素和对应名称,完美解决标题生成问题:

1. 构造示例数据

set.seed(123)
df1 <- data.frame(x = rnorm(50), y = rnorm(50))
df2 <- data.frame(x = rnorm(50), y = rnorm(50))
df3 <- data.frame(x = rnorm(50), y = rnorm(50))
df4 <- data.frame(x = rnorm(50), y = rnorm(50))
df_list <- list("Blood_Culture" = df1, "Urine_Culture" = df2, "Sputum_Culture" = df3, "Wound_Culture" = df4)

2. 编写带标题的绘图函数

library(ggplot2)
library(purrr)

# 绘图函数同时接收数据和数据名称
plot_single_df <- function(data, df_name) {
  ggplot(data, aes(x = x, y = y)) +
    geom_point(color = "#2c3e50") +
    ggtitle(paste0(df_name, " for non-recurrent infections")) +
    theme(plot.title = element_text(hjust = 0.5, size = 10)) # 标题居中、调整字号
}

# 生成带标题的图表列表
plot_collection <- imap(df_list, plot_single_df)

imap()会自动把列表的每个元素(DataFrame)和对应名称传入函数,让ggtitle生成指定格式的标题。如果不用purrr,手动循环也能实现:

plot_collection <- list()
for (i in seq_along(df_list)) {
  df_name <- names(df_list)[i]
  plot_collection[[i]] <- ggplot(df_list[[i]], aes(x = x, y = y)) +
    geom_point() +
    ggtitle(paste0(df_name, " for non-recurrent infections"))
}

二、最多8个图表并排展示

用patchwork包可轻松实现灵活的多图排版:

1. 安装并加载patchwork

install.packages("patchwork")
library(patchwork)

2. 排版图表

针对最多8个图表,推荐用ncol=4+nrow=2的布局(4列2行刚好容纳8个),若图表数量少于8,会自动填充空白:

# 排版并输出
wrap_plots(plot_collection, ncol = 4, nrow = 2, guides = "collect")
  • guides="collect"可合并重复图例(若你的图表包含图例)
  • 还能通过widths和heights参数调整行列宽高比例,比如widths = c(2,1,1,2)让第1、4列更宽

若不想用patchwork,也可使用gridExtra::grid.arrange(),但patchwork的语法更简洁直观。

内容的提问来源于stack exchange,提问作者bellbyrne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 15:24:56