r - 非标准评估、lapply 和 ggplot

标签 r ggplot2 nse

我正在尝试使用 ggplot2 以编程方式绘制分布。

我不知道如何在这里使用非标准评估(NSE)(即使在阅读了哈德利关于 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已打印(参见图)。

plot resulting from code above

我的目标是拥有 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)

或者只使用方面:
mtcars2 <- tidyr::gather(mtcars)
ggplot(mtcars2, aes(value)) + geom_density() + facet_wrap(~key, scales = 'free')

关于r - 非标准评估、lapply 和 ggplot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38264528/

相关文章:

r - 如何在plotly R中修复条的宽度

r - 将直接标签添加到 ggplot2 geom_area 图表

r - 如何在 r 的函数定义中正确使用 dplyr 动词?

r - 为什么 quosures 在 group_by() 中起作用,但在 filter() 中不起作用?

r - ggplot 上的混合刻度

r - 如何根据列表中每个元素的名称使用map_if

r - 在哪里可以找到有关ggplot选项的文档?

具有 3 个变量的 R 条形图

r - 如何在 R 中的 PAM 中获取主成分数据

r - 如何替换已弃用的 ggplot2 函数 aes_string : accepting an arbitrary number of named strings to specify aesthetic mappings?