我想从以下数据框架中生成一个散点图的矩阵。
# 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
函数,则在我的散点图矩阵的对角线下方和上方都得到散点图。
我确实想将散点图保留在上部面板中,但是,我想在下图中"绘制"数据的相关系数。
我已经在网上寻找答案,尽管找到了一些很好的解释,但到目前为止,我还没有成功。像这里一样,这里,这里也在这里。在阐明数据框架中有不同级别的数据时,这些示例并没有跨越案例。
正如我的数据所示,我的数据框架中有两个级别," A"one_answers" B"。因此,我想在下部面板的每个"框"中具有两个相关系数,一个用于数据的数据,其级别为A,用于其级别B。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
GGally
库中的函数 ggscatmat
将可以解决问题。
例如,对于生成的数据,将使用
绘制令人满意的散点图矩阵ggscatmat(df, columns = 2:4, color = "Type", alpha = 0.25)
进一步的ggplot
规格(如scale_color_...
和theme
(也将起作用。当然,与任何包装功能一样,可能需要对其进行一些调整以获得所需的结果。但是,此功能是一个很好的开始。