我想在我的数据集中使用这种类型的箱形图来表示几个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变量分组的虹膜都包含在框中?
答案 0 :(得分:1)
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)
<强>图:强>
另请注意,plot
是一般绘图的基本功能。用基本功能覆盖基本功能是不安全的,因为它可能会在以后导致意外结果。