将ggplot应用于x&s和y的列表

时间:2015-11-03 22:19:20

标签: r ggplot2 apply

我有一个类似下面的df,其中x1和x2是变量,y1和y2是值。

ID x1 x2  y1  y2
1   a  T 100  2
2   b  T 210  4
3   b  F 112  5
4   a  F 121  1
5   b  F 412  1

我想在它们之间制作4个箱图:y1~x1,y1~x2,y2~x1,y2~x2。有没有想过这样做?

我运行了一个boxplot函数,类似于

boxplot <- function(i,j){
ggplot(df, aes_string(x=i, y=j, col=i)+
  geom_boxplot()
}

不完全相同,但它的测试和功能类似于boxplot(x1,y1)等。 但我不知道如何将函数应用于i = c(x1,x2),j = c(y1,y2),以便一次性绘制所有关系。我试过申请,lapply,tapply,mapply,Map。

提前致谢!

1 个答案:

答案 0 :(得分:1)

一种方法是melt两次数据:

df <- read.table(header = TRUE, stringsAsFactors = FALSE,
                 text = "ID x1 x2  y1  y2
                         1   a  T 100  2
                         2   b  T 210  4
                         3   b  F 112  5
                         4   a  F 121  1
                         5   b  F 412  1")

library('ggplot2')
library('reshape2')
mm <- melt(melt(df[, -1], id.vars = c('y1','y2')), id.vars = c('variable','value'))
names(mm) <- make.unique(names(mm))

ggplot(mm, aes(value, value.1)) +
  geom_boxplot() +
  facet_wrap(variable ~ variable.1, drop = TRUE, scales = 'free')

enter image description here