如何绘制数据帧的某些变量与其他变量?

时间:2016-03-30 15:51:15

标签: r ggplot2

函数pairs()产生所有p x p对变量的p散点图。

    x<-rnorm(100,0,1)
    y<-rnorm(100,0,1)
    z<-rnorm(100,1,1)
    t<-rnorm(100,2,10)
    dd<-cbind(x,y,z,t)
    pairs(dd)

但我希望能够选择网格的“线”和列。例如,绘制这些对(x,y)(x,z)(t,y)(t,z)。是否有一个接受像(x + t)〜(z + y)这样的公式的函数?

1 个答案:

答案 0 :(得分:0)

您可以使用pairs的特定参数,也可以创建一个接受公式作为输入的自定义函数:

pairs(dd, horInd=c(1, 4), verInd=c(2,3))

自定义功能:

my_pairs <- function(df, formula) {
  form <- deparse(formula)
  s <- strsplit(form, "~")
  lhs <- trimws(unlist(strsplit(s[[1]][1], "\\+")))
  rhs <- trimws(unlist(strsplit(s[[1]][2], "\\+")))

  lhs.ind <- match(lhs, colnames(df))
  rhs.ind <- match(rhs, colnames(df))
  all_cmbs <- expand.grid(lhs.ind, rhs.ind)
  rows <- all_cmbs[,1]
  cols <- all_cmbs[,2]
  par(mfrow=c(2,2))
  for(i in 1:4) {
    eval(substitute(plot(df[,rows[i]], df[,cols[i]], 
                         xlab=colnames(df)[rows[i]],
                         ylab=colnames(df)[cols[i]])))
  }
}

my_pairs(dd, x + t ~ y + z)