使用lapply制作变量列表的箱形图

时间:2016-12-19 08:10:01

标签: r ggplot2 lapply

我想在我的数据集中使用这种类型的箱形图来表示几个y变量:normal boxplot for all irises with Species as x-value。由于我有多个y变量要绘制,我尝试使用这样的lapply:

varlist <- c('Sepal.Length', 'Sepal.Width')

plot <- function (varlist) {
  require(ggplot2)
  ggplot(data = iris, aes(x=Species, y=varlist))+
    geom_boxplot() 
}

lapply(varlist, FUN = plot)

我得到了这个情节: with only one iris per plot

如何使用一种类型的循环获得正常的箱图(因为有几个y值),并且所有由x变量分组的虹膜都包含在框中?

2 个答案:

答案 0 :(得分:1)

IIRC,aes()不处理字符串输入;你需要aes_string()。我希望(但尚未测试)如果您将ggplot()电话改为ggplot(data = iris, mapping = aes_string(x = 'Species', y = varlist)),您的功能将会有效。

答案 1 :(得分:0)

使用dplyr,您可以:

library("ggplot2")
library("dplyr")


varlist <- c('Sepal.Length', 'Sepal.Width')

customPlot <- function(varName) {

iris %>% 
group_by_("Species") %>% 
select_("Species",varName) %>% 
ggplot(aes_string("Species",varName)) + geom_boxplot()

}
lapply(varlist,customPlot)

<强>图:

enter image description here

enter image description here

另请注意,plot是一般绘图的基本功能。用基本功能覆盖基本功能是不安全的,因为它可能会在以后导致意外结果。