如何在 lapply 期间将 ggplot x-label 设置为等于变量名?
How to set ggplot x-label equal to variable name during lapply?
我正在绘制一个 y 变量对多个 x 变量的图。
我有一个使用 lapply 的有效解决方案。但是,我无法将 x 变量的名称写为每个图的 x 标签。这是我所拥有的一个简化示例:
目标是针对每个 x 变量绘制 y 变量,从而生成三个图并添加每个 x 变量的名称作为 x 轴标签。
生成一个包含一个 y 变量和三个 x 变量的数据框:
df <- data.frame(y.variable=c(11:20), x1=c(21:30),x2=c(1:10),x3=c(31:40))
应该以字符串形式检索变量名称的函数:
get_name <- function(v1) {deparse(substitute(v1))}
生成 y 对 x 变量图的函数:
generate_plot <- function(x.variable) {ggplot(data = df, aes(x.variable, y.variable )) +geom_point() + xlab(get_name(variable.name))}
调用 lapply 对 df 的每一列执行 generate_plot:
lapply(df, generate_plot)
这会生成三个图,每个图都有 "variable.x" 作为其 x 标签,而不是所需的变量名称 x1、x2 和 x3。
我稍微修改一下你的generate_plot
,使用支持tidy evaluation
的ggplot2
(> v3.0.0
)版本
解释:
在函数内部,我们使用 rlang::sym
将字符串转换为符号,然后 unquote
它在 aes
中使用 !!
(bang bang )
要调用该函数,请使用 purrr::map
遍历 df
列名称
查看更多:
- https://dplyr.tidyverse.org/articles/programming.html
- http://rlang.r-lib.org/reference/quotation.html
library(tidyverse)
df <- data.frame(y.variable=c(11:20),
x1=c(21:30), x2=c(1:10), x3=c(31:40))
generate_plot2 <- function(df, x.variable) {
x.variable <- rlang::sym(x.variable)
ggplot(data = df, aes(!! x.variable, y.variable )) +
geom_point() +
xlab(x.variable)
}
names(df)[-1] %>%
map(~ generate_plot2(df, .x))
由 reprex package (v0.2.0) 创建于 2018-04-20。
我正在绘制一个 y 变量对多个 x 变量的图。 我有一个使用 lapply 的有效解决方案。但是,我无法将 x 变量的名称写为每个图的 x 标签。这是我所拥有的一个简化示例:
目标是针对每个 x 变量绘制 y 变量,从而生成三个图并添加每个 x 变量的名称作为 x 轴标签。
生成一个包含一个 y 变量和三个 x 变量的数据框:
df <- data.frame(y.variable=c(11:20), x1=c(21:30),x2=c(1:10),x3=c(31:40))
应该以字符串形式检索变量名称的函数:
get_name <- function(v1) {deparse(substitute(v1))}
生成 y 对 x 变量图的函数:
generate_plot <- function(x.variable) {ggplot(data = df, aes(x.variable, y.variable )) +geom_point() + xlab(get_name(variable.name))}
调用 lapply 对 df 的每一列执行 generate_plot:
lapply(df, generate_plot)
这会生成三个图,每个图都有 "variable.x" 作为其 x 标签,而不是所需的变量名称 x1、x2 和 x3。
我稍微修改一下你的generate_plot
,使用支持tidy evaluation
ggplot2
(> v3.0.0
)版本
解释:
在函数内部,我们使用
rlang::sym
将字符串转换为符号,然后unquote
它在aes
中使用!!
(bang bang )要调用该函数,请使用
purrr::map
遍历df
列名称
查看更多:
- https://dplyr.tidyverse.org/articles/programming.html
- http://rlang.r-lib.org/reference/quotation.html
library(tidyverse)
df <- data.frame(y.variable=c(11:20),
x1=c(21:30), x2=c(1:10), x3=c(31:40))
generate_plot2 <- function(df, x.variable) {
x.variable <- rlang::sym(x.variable)
ggplot(data = df, aes(!! x.variable, y.variable )) +
geom_point() +
xlab(x.variable)
}
names(df)[-1] %>%
map(~ generate_plot2(df, .x))
由 reprex package (v0.2.0) 创建于 2018-04-20。