r - 如何以编程方式为 70 多个变量生成 ggplot?
问题描述
我有一个包含约 70 个变量的数据框(每个变量都是一个问题),我想使用相同的自定义主题为所有这些变量创建图。我认为这是可行的purrr()
,但我还没有弄清楚那个傻瓜。
本质上,我想通过以下代码运行每个变量(比如 i 到 N):
ggplot(aes(fct_rev(fct_infreq(`var_i`)))) +
geom_bar(stat = "count") +
labs(subtitle = `var_i`) +
coord_flip() +
theme(...) +
ggsave("var_i.svg", device = "svg")
我希望为每个变量获取一个 svg,使用变量名填充图表中的文件名和副标题。
这是一个等价的dput()
:
structure(list(Species_L = c("setosa5.1", "setosa4.9", "setosa4.7",
"setosa4.6", "setosa5", "setosa5.4", "setosa4.6", "setosa5",
"setosa4.4", "setosa4.9", "setosa5.4", "setosa4.8", "setosa4.8",
"setosa4.3", "setosa5.8", "setosa5.7", "setosa5.4", "setosa5.1",
"setosa5.7", "setosa5.1"), Species_W = c("setosa3.5", "setosa3",
"setosa3.2", "setosa3.1", "setosa3.6", "setosa3.9", "setosa3.4",
"setosa3.4", "setosa2.9", "setosa3.1", "setosa3.7", "setosa3.4",
"setosa3", "setosa3", "setosa4", "setosa4.4", "setosa3.9", "setosa3.5",
"setosa3.8", "setosa3.8"), Species_PL = c("setosa1.4", "setosa1.4",
"setosa1.3", "setosa1.5", "setosa1.4", "setosa1.7", "setosa1.4",
"setosa1.5", "setosa1.4", "setosa1.5", "setosa1.5", "setosa1.6",
"setosa1.4", "setosa1.1", "setosa1.2", "setosa1.5", "setosa1.3",
"setosa1.4", "setosa1.7", "setosa1.5"), Species_PW = c("setosa0.2",
"setosa0.2", "setosa0.2", "setosa0.2", "setosa0.2", "setosa0.4",
"setosa0.3", "setosa0.2", "setosa0.2", "setosa0.1", "setosa0.2",
"setosa0.2", "setosa0.1", "setosa0.1", "setosa0.2", "setosa0.4",
"setosa0.4", "setosa0.3", "setosa0.3", "setosa0.3")), class = "data.frame", row.names = c(NA,
-20L))
解决方案
您可以遍历列名。这样,您将列名作为字符串,这使得在文件名和标签中易于使用,但您必须进行一些转换才能使其理解aes()
:
for (var_name in colnames(df)) {
p = ggplot(df, aes(fct_rev(fct_infreq(!! sym(var_name))))) +
geom_bar(stat = "count") +
labs(subtitle = var_name) +
coord_flip()
# Need to explicitly print the plot in the loop for it to
# show up
print(p)
ggsave(paste0(var_name, ".svg"))
}
推荐阅读
- c++ - 在创建和不创建模板的情况下递增迭代器
- reactjs - react-native-autocomplete-input 中的borderRadius
- vb.net - VB.Net 中的子串方法
- visual-studio-code - WSL zsh 集成 VSCode 用户帐户更改?
- python - 从 Dask 任务流到完成的访问时间
- python - Mongodb 显示文本而不是 HTML
- python - 如何使用 Telegram Bot 删除所有聊天记录?
- firebase - 在 useEffect hook 中使用时 Mobx observale 值为 null
- python - 在寻找 pygame 事件时进行长时间计算
- c# - 如何在没有用户干预的情况下获得 OAuth2 身份验证