当数据具有2个级别时,如何在散点图矩阵的下部面板中写出Pearson相关系数?

时间:2019-06-24 19:30:21

标签: r scatter-plot pearson-correlation

我想根据以下数据帧生成散点图矩阵。

# Generate some fake data
set.seed(123)
fakeData <- rnorm(10)
df <- data.frame(Type=c(rep("A", 5), rep("B", 5)), 
                 Syst=fakeData, Bio=2*fakeData, Blr=fakeData^2)

如果使用pairs函数,则在散点图矩阵的对角线下方和上方都会出现散点图。

我确实希望将散点图保留在上部面板中,但是,我想在下部面板中“绘制”数据的相关系数。

我一直在网上寻找答案,尽管找到了一些很好的解释,但到目前为止我还没有成功。 Like hereand herehere tooand here as well。在阐明时,这些示例不会覆盖数据帧中存在不同级别数据的情况。

正如我的数据所示,我的数据框中有两个级别:“ A”和“ B”。因此,我想在下部面板的每个“框中”有两个相关系数,一个用于级别为A的数据,另一个用于级别为B的数据。例如,在绘制pair(df [2: 4]),我想在矩阵第二行(下图)的第一个框中看到这两个系数。

这行代码

pairs(df[2:4], main="", pch=21, bg=c("red","blue"), lower.panel=NULL)

将在上方面板上绘制散点图矩阵。通过为bg指定颜色选项,我可以区分A和B数据点。理想情况下,我的Pearson相关系数将以与它们各自数据相同的方式绘制。


尝试#1 -我采用了以下注释功能,并进行了一些更改,以适应所需结果的更改。

# panel.cor <- function(x, y, digits=2, prefix="", cex.cor, ...)
# {
#   usr <- par("usr"); on.exit(par(usr))
#   par(usr = c(0, 1, 0, 1))
#   r <- abs(cor(x, y))
#   txt <- format(c(r, 0.123456789), digits=digits)[1]
#   txt <- paste(prefix, txt, sep="")
#   if(missing(cex.cor)) cex.cor <- 2
#   text(0.5, 0.5, txt, cex = cex.cor)
# }

我知道我的数据框“ df”有10行。假设我只想在下面的面板中打印级别为A的数据的相关性。我考虑过更改x和y尺寸,以限制两个变量仅获取A级数据。

panel.cor <- function(x, y, digits=2, prefix="", cex.cor, ...)
{
  x <- x[1:5,1:3]
  y <- y[1:5,1:3]
  usr <- par("usr"); on.exit(par(usr))
  par(usr = c(0, 1, 0, 1))
  r <- abs(cor(x, y))
  txt <- format(c(r, 0.123456789), digits=digits)[1]
  txt <- paste(prefix, txt, sep="")
  if(missing(cex.cor)) cex.cor <- 2
  text(0.5, 0.5, txt, cex = cex.cor)
}

不幸的是,这也不起作用。我收到一条错误消息,内容为incorrect number of dimensions

1 个答案:

答案 0 :(得分:0)

initReactI18next库中的函数ggscatmat可以解决问题。

例如,对于生成的数据,将使用绘制一个令人满意的散点图矩阵

GGally

ggscatmat(df, columns = 2:4, color = "Type", alpha = 0.25) ggplot等其他scale_color_...规范也将适用。当然,与任何包功能一样,可能需要对其进行一些微调才能获得所需的结果。但是,此功能是一个很好的开始。