在R

时间:2015-09-15 23:18:15

标签: r plot ggplot2 density-plot

我正在尝试使用来自R中GGally库的ggpairs来显示数据集。我想要一个对角线,每个变量的密度图由分组变量分隔。由于规模问题,我无法获得正确的情节。为了说明我的观点,我将使用以下人工数据集:

group=as.numeric(cut(runif(100),c(0,1/2,1),c(1,2)))
x=rnorm(100,group,1)
x[group==1]=(x[group==1])^2
y=2*x+rnorm(100,0,0.1)
data=data.frame(group=as.factor(group),x=x,y=y)

使用ggpairs,我得到以下情节

library(ggplot2)
library(GGally)    
ggpairs(data,columns = 2:3,colour="group")

enter image description here

现在,将左上图与使用普通ggplot2获得的变量x的密度图进行比较:

ggplot(data, aes(x = x, colour = group)) + geom_density() 

enter image description here

我们可以看到ggpairs中红色和蓝色曲线的y标度(第一个数字)不一样,这可能会导致误导性的结论。我怎样才能在ggpairs中纠正这个问题?

1 个答案:

答案 0 :(得分:0)

以下是开发人员的答案:

  

你是对的。它们没有正确显示。 : - (

     

使用当前的CRAN版本,请尝试以下操作...

set.seed(1234)
group = as.numeric(cut(runif(100),c(0,1/2,1),c(1,2)))
x = rnorm(100,group,1)
x[group == 1] = (x[group == 1])^2
y = (2 * x) + rnorm(100,0,0.1)
data = data.frame(group = as.factor(group), x = x, y = y)

library(ggplot2)
library(GGally)    

# # bad example
# ggpairs(data,columns = 2:3,colour="group")


ggally_correct_diag_densityDiag <- function(data, mapping, ...) {
  # the color is corrected to fill by ggpairs
  # to get desired output with color, it is changed back here.
  if (! is.null(mapping$fill)) {
    mapping$colour = mapping$fill
    mapping$fill = NULL
  }

  ggplot(data, mapping) + geom_density(...) 
}

ggpairs(data, columns = 2:3, colour = "group", diag = list(continuous = "correct_diag_density"))
     

在下一个版本之前,您可以利用ggpairs的eval过程。   &#34; ggally_FN_NAME&#34;或&#34; ggally_FN_NAMEDiag&#34;是命名约定   跟随。下一个版本将允许提交自定义功能   直接如:

ggpairs(data, columns = 2:3, colour = "group", diag = list(continuous = ggally_correct_diag_densityDiag))

github page

中查看更多详情