r - knitr 打印 .Rnw 中的图形列表
问题描述
我想打印图表列表 throw .Rnw
。想知道如何完成任务。
\documentclass{article}
\begin{document}
\SweaveOpts{concordance=TRUE}
\begin{figure}[H]
<< label = Plot >>=
library(tidyverse)
Ys <- c("disp", "hp", "drat", "wt", "qsec")
Plots <-
Ys %>%
map(function(y)
ggplot(data = mtcars, mapping = aes(x = mpg, y = y)) +
geom_point(aes_string(y = y))
)
print(Plots)
@
\end{figure}
\end{document}
解决方案
您可以使用其中一种变体purrr::walk
来静默映射绘图列表并将它们保存为ggsave
. walk2
映射两个列表,或iwalk
映射一个列表及其名称。iwalk
如果您给出情节列表名称,那真的很简单;我在这里做的方式有点尴尬,但是在野外,例如从已拆分的数据框或已经有名称的向量进行绘图时,它可能会有所不同。
aes_string
用于以aes
编程方式创建调用,但不推荐使用它以支持 tidy eval;这方面的一个例子是在aes
文档中,但我也被这个答案提醒了如何做到这一点。
我首先命名向量,并以它自己的值作为它的名称。然后我映射它并应用一个函数,该函数接受一个字符串y
并使用rlang::sym
. 这允许我使用 tidy eval 创建一个裸列名称!!y_sum
。
# https://stackoverflow.com/a/50726130/5325862
Plots <- Ys %>%
setNames(., nm = .) %>%
map(function(y) {
y_sym <- rlang::sym(y)
ggplot(data = mtcars, aes(x = mpg, y = !!y_sym)) +
geom_point()
})
列表中的一个绘图示例,可以通过名称访问:
Plots$hp
然后保存绘图,iwalk
使用名称创建文件名。您可以向 中添加其他参数ggsave
,例如尺寸和分辨率。
Plots %>%
iwalk(~ggsave(filename = sprintf("%s_vs_mpg.png", .y), plot = .x))
#> Saving 7 x 5 in image
#> Saving 7 x 5 in image
#> Saving 7 x 5 in image
#> Saving 7 x 5 in image
#> Saving 7 x 5 in image
如果需要,您可以一步完成所有操作:映射以制作绘图并保存在单个函数中。我采用了将绘图保存到列表的方法,因为这就是您在问题中所做的,它允许您在文档中提取单个绘图,而不仅仅是将它们保存为文件。
推荐阅读
- windows - 如何回到 PowerShell 中的最后一个命令输入位置?
- powershell - 以前没有 MFA 的帐户是否会继续使用 Exchange Online PowerShell V2 (EXO V2) 模块
- html - 如何在 HTML 网站的所有页面中隐藏 Safari 地址栏?
- amazon-web-services - 自定义 AWS Elasticbeanstalk EC2 日志
- jquery - 从 API URL 下载 PDF
- php - Laravel 调度程序 Cron 作业
- javascript - 在导入到 Apps 脚本之前将 Google 表格日期转换为其数字格式
- react-native - React-Native :当设备是平板电脑时添加条件
- swagger - 无法从 Windows 服务器上的 hapi-swagger 获得任何响应
- flutter - HTTP 请求失败,状态码:403,https://maps.googleapis.com/maps/api/staticmap?