使用 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 制作变量列表的箱线图的主要内容,如果未能解决你的问题,请参考以下文章

制作一个ggplot箱线图,其中每列都是它自己的箱线图

Plotly - 如何制作没有盒子的箱线图?

如何用R中的样本组制作特定行的箱线图

matplotlib:每个类别的箱线图

R中多个变量的箱线图/直方图

将实际数据覆盖在来自 pandas 数据框的箱线图上