R语言列表列分组ggplot绘图打印及facet_wrap整合咨询
解决方案
1、Rmd中逐个打印绘图的修复
你之前的代码报错是因为map()的第一个参数为整个tibble对象,无法直接识别列名plots作为迭代对象。同时打印属于副作用操作,使用purrr::walk()更适配Rmd环境,不会输出多余的列表结构:
# 基础打印方案 mydiamonds %>% pull(plots) %>% walk(print) # 可选:打印时自动添加cut|color格式的标题 mydiamonds %>% pwalk(function(cut, color, data, plots) { print(plots + ggtitle(paste0(cut, "|", color))) })
如果你的Rmd代码块渲染时没有出图,确认代码块没有设置echo=FALSE、fig.show="hide"这类参数即可。
2、facet_wrap整合为单张分面图的实现
完全可以实现,不需要先生成嵌套列表列,直接基于原始数据集生成分面标签即可,运行效率更高:
diamonds %>% # 生成要求格式的分面标签 mutate(facet_label = paste0(cut, "|", color)) %>% ggplot(aes(x = x, y = price)) + geom_point() + # 35个分面可按7列5行布局,可自行调整ncol/nrow参数 facet_wrap(~facet_label, ncol = 7, scales = "free") # 如需要统一坐标轴可去掉scales参数
如果你一定要复用已经生成的plots列表列的绘图结果,也可以使用patchwork包拼接所有图,但直接用原生facet_wrap的方案更简洁易维护。
内容的提问来源于stack exchange,提问作者Doug Fir
相关产品推荐
相关产品推荐

