r - 带有 purrr::walk 的嵌套循环留下空地块
问题描述
下面的代码生成一个图网格:
library(tidyverse)
library(grid)
library(patchwork)
exdata <- diamonds %>%
group_by(cut) %>%
nest %>%
crossing(dummy = 1:3) %>%
crossing(cohort = LETTERS[1:3]) %>%
mutate(plots = map(.x = data, ~ ggplot(.x, aes(x = x, y = y)) + geom_point()))
# vars for plot grid
mod <- 'Fair'
colsn <- length(unique(exdata$dummy))
rowsn <- length(exdata$cohort %>% unique)
# create plots
wrap_plots(plotlist = exdata %>% filter(cut == mod) %>% pull(plots), ncol = colsn, nrow = rowsn) + plot_annotation(title = " ")
# add some text across columns
walk2(seq(0.165,0.835, length.out = colsn), unique(exdata$dummy), ~ grid.draw(textGrob(.y, x = .x, y = 0.98, rot = 0)))
在那个代码块中,我有一个变量mod <- 'Fair'
. 我想让它成为一个向量,并为每种类型的钻石切割生成一个网格。试过:
mods <- exdata$cut %>% unique %>% as.vector
walk(mods, function(.x) {
wrap_plots(plotlist = exdata %>% filter(cut == .x) %>% pull(plots), ncol = colsn, nrow = rowsn) + plot_annotation(title = " ")
walk2(seq(0.165,0.835, length.out = colsn), unique(exdata$dummy), ~ grid.draw(textGrob(.y, x = .x, y = 0.98, rot = 0)))
})
此代码似乎运行没有错误,但没有返回所有图。网格本身是,只是没有情节:
如何运行嵌套的步行循环来为每种类型的切割生成图网格?
解决方案
只需将您的绘图包装在打印语句中即可解决问题
walk(mods, function(.x) {
print(wrap_plots(plotlist = exdata %>% filter(cut == .x) %>% pull(plots), ncol = colsn, nrow = rowsn) + plot_annotation(title = " "))
walk2(seq(0.165,0.835, length.out = colsn), unique(exdata$dummy), ~ grid.draw(textGrob(.y, x = .x, y = 0.98, rot = 0)))
})
推荐阅读
- javascript - 参数不符合javascript时如何不打开文件上传
- python - 用于将文件和目录从一台远程服务器复制到另一台远程服务器的 Python 脚本
- java - 使用 findViewWithTag 和 getTag 时应用程序崩溃
- javascript - 随机播放 HTML 中的音频
- android - 未解决的参考:Kotlin 中扩展类的方法
- c# - 在 C# 中将具有未知分隔符和可选时间元素的年/月/日字符串解析为 DateTime
- javascript - 如何获取 css 属性并通过 javascript 更改 html 元素的高度
- html - CSS-头像随机改变大小
- python-3.x - 如何创建多维字典
- java - Java 泛型 - 不兼容的界限