我想根据以下数据帧生成散点图矩阵。
# 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 here,and here,here too,and 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
答案 0 :(得分:0)
initReactI18next
库中的函数ggscatmat
可以解决问题。
例如,对于生成的数据,将使用绘制一个令人满意的散点图矩阵
GGally
ggscatmat(df, columns = 2:4, color = "Type", alpha = 0.25)
和ggplot
等其他scale_color_...
规范也将适用。当然,与任何包功能一样,可能需要对其进行一些微调才能获得所需的结果。但是,此功能是一个很好的开始。