我正在尝试使用ggplot2以编程方式绘制分布.
我无法弄清楚如何在这里使用非标准评估(NSE)(甚至在阅读过Hadley的NSE书籍章节之后).
请考虑以下代码:
library(ggplot2)
gg_dens <- function(x){
eval(ggplot(data.frame(x), aes_string(x = substitute(x))) + geom_density() +
ggtitle(substitute(x)), data.frame(x))
}
lapply(mtcars, function(x) gg_dens(x))
这段代码确实生成了许多密度图,每列一个,确定.但是,它不会打印正在绘制的变量的名称.相反,打印占位符变量x(参见图).
我的目标是将x引号替换为实际变量名,例如mpg.
最佳答案 lapply无法使用您现在解决此问题的功能. x只是传递给该函数的向量,它不是该变量的名称,而lapply不传递任何名称.换句话说,在该函数的范围内没有任何东西可以找出适当的x轴标签.
一种解决方案类似于@Jimbou:
gg_dens <- function(name, dat) {
ggplot(dat, aes_string(x = name)) + geom_density() + ggtitle(name)
}
lapply(names(mtcars), gg_dens, mtcars)
或者只使用facets:
mtcars2 <- tidyr::gather(mtcars)
ggplot(mtcars2, aes(value)) + geom_density() + facet_wrap(~key, scales = 'free')