使用 lapply 制作变量列表的箱线图
Posted
技术标签:
【中文标题】使用 lapply 制作变量列表的箱线图【英文标题】:Using lapply to make boxplots of a variable list 【发布时间】:2017-05-04 05:57:58 【问题描述】:我希望数据集中的几个 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 变量分组的所有虹膜都包含在框中的位置?
【问题讨论】:
【参考方案1】:使用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)
情节:
另请注意,plot
是用于一般绘图的基本函数。用用户定义的函数覆盖基本函数是不安全的,因为这可能会导致以后出现意外结果。
【讨论】:
【参考方案2】:IIRC,aes()
不处理字符串输入;你需要aes_string()
。如果您将ggplot()
调用更改为ggplot(data = iris, mapping = aes_string(x = 'Species', y = varlist))
,我希望(但尚未测试)您的功能将起作用。
【讨论】:
以上是关于使用 lapply 制作变量列表的箱线图的主要内容,如果未能解决你的问题,请参考以下文章