如何在 ggpairs 中使用第二条相关线自定义图形
How to customize graph with 2nd correlation line in ggpairs
继 post、
我用下面的代码制作了图表;
library("GGally")
library("ggplot2")
data(iris)
lowerFn <- function(data, mapping, method = "lm", ...) {
p <- ggplot(data = data, mapping = mapping) +
geom_point(colour = "blue") +
geom_smooth(method = method, color = "red", ...)
p
}
ggpairs(
iris[, 1:4], lower = list(continuous = wrap(lowerFn, method = "lm")),
diag = list(continuous = wrap("barDiag", colour = "blue")),
upper = list(continuous = wrap("cor", size = 10))
)
我的问题是;
- 如何通过在图上添加“Sil”变量效应作为相关线来制作相同样式的散点图矩阵图。就像这张图将 Si 变量效应显示为 2 条相关线
数据在这里,(添加 Sil 变量的虹膜数据)
https://docs.google.com/spreadsheets/d/15voAmJ7vcozmHYKYnHxFd_3A3fkkIvzQV6zi44lIEGg/edit#gid=0
如果您想为点着色并生成回归拟合线
group 然后你需要将美学映射到一些变量。
在一般情况下,您可以将映射添加到顶层,并且
这将按组拆分所有面板。
ggpairs(iris, columns=1:4, mapping=aes(colour=Species))
但是,如果您只想在面板的一个部分中按组绘图,我认为您需要做更多的工作。一种方法是首先将您的用户函数更改为以下内容,这提供了一个额外的 emap
参数,该参数将仅在 lowerFn
中控制美学。
lowerFn <- function(data, mapping, emap=NULL, method = "lm", ...) {
# mapping <- c(mapping, emap)
# class(mapping) = "uneval" # need this to combine the two aes
# Can use this instead
mapping <- ggplot2:::new_aes( c(mapping, emap))
p <- ggplot(data = data, mapping = mapping) +
geom_point() +
geom_smooth(method = method, ...) +
theme_classic() # to get the white background and prominent axis
p
}
然后您可以使用以下方式调用它,这应该保留对角线和上部美学。
ggpairs(
iris, columns=1:4,
lower = list(continuous = wrap(lowerFn,
method = "lm", fullrange=TRUE, se=FALSE,
emap=aes(color=Species))))
这会产生
您当然可以将您的分组变量硬编码到用户函数中:
lowerFn <- function(data, mapping, method = "lm", ...) {
p <- ggplot(data = data, mapping = mapping) +
geom_point(aes(colour=Species)) +
geom_smooth(method = method, aes(colour=Species), ...)
p
}
ggpairs(
iris, columns=1:4,
lower = list(continuous =
wrap(lowerFn, method = "lm",
fullrange=TRUE, se=FALSE)))
注释:当你在geom_point
中添加colour
参数时
或 geom_smooth
在您的用户函数中,它将否决映射的 colour
例如比较以下结果
ggplot(iris, aes(Sepal.Length, Sepal.Width, col=Species)) +
geom_smooth(se=FALSE)
ggplot(iris, aes(Sepal.Length, Sepal.Width, col=Species)) +
geom_smooth(col="red", se=FALSE)
问?如何在图表上输入回归线的键值?
如果您使用全局/顶级美学,您可以使用 ggpairs(iris, columns=1:4, aes(colour=Species), legend=1)
和普通 ggplot
theme
函数来控制它。这不能在这里完成,因为在自定义函数中使用了分组变量。但是,该包提供了一种使用 legend
参数添加自定义图例的方法;您可以在 ggpairs
之外生成一个虚拟图例,然后在绘图过程中添加它。
leg <- grab_legend(ggplot(data=iris, aes(x=NA, y=NA, colour=Species)) +
geom_line() + theme(legend.direction = "horizontal"))
ggpairs(
iris, columns=1:4, legend=leg,
lower = list(continuous =
wrap(lowerFn, method = "lm",
emap=aes(color=Species),
fullrange=TRUE, se=FALSE))) +
theme(legend.position = "top")
继 post、
library("GGally")
library("ggplot2")
data(iris)
lowerFn <- function(data, mapping, method = "lm", ...) {
p <- ggplot(data = data, mapping = mapping) +
geom_point(colour = "blue") +
geom_smooth(method = method, color = "red", ...)
p
}
ggpairs(
iris[, 1:4], lower = list(continuous = wrap(lowerFn, method = "lm")),
diag = list(continuous = wrap("barDiag", colour = "blue")),
upper = list(continuous = wrap("cor", size = 10))
)
我的问题是;
- 如何通过在图上添加“Sil”变量效应作为相关线来制作相同样式的散点图矩阵图。就像这张图将 Si 变量效应显示为 2 条相关线
数据在这里,(添加 Sil 变量的虹膜数据) https://docs.google.com/spreadsheets/d/15voAmJ7vcozmHYKYnHxFd_3A3fkkIvzQV6zi44lIEGg/edit#gid=0
如果您想为点着色并生成回归拟合线 group 然后你需要将美学映射到一些变量。
在一般情况下,您可以将映射添加到顶层,并且 这将按组拆分所有面板。
ggpairs(iris, columns=1:4, mapping=aes(colour=Species))
但是,如果您只想在面板的一个部分中按组绘图,我认为您需要做更多的工作。一种方法是首先将您的用户函数更改为以下内容,这提供了一个额外的 emap
参数,该参数将仅在 lowerFn
中控制美学。
lowerFn <- function(data, mapping, emap=NULL, method = "lm", ...) {
# mapping <- c(mapping, emap)
# class(mapping) = "uneval" # need this to combine the two aes
# Can use this instead
mapping <- ggplot2:::new_aes( c(mapping, emap))
p <- ggplot(data = data, mapping = mapping) +
geom_point() +
geom_smooth(method = method, ...) +
theme_classic() # to get the white background and prominent axis
p
}
然后您可以使用以下方式调用它,这应该保留对角线和上部美学。
ggpairs(
iris, columns=1:4,
lower = list(continuous = wrap(lowerFn,
method = "lm", fullrange=TRUE, se=FALSE,
emap=aes(color=Species))))
这会产生
您当然可以将您的分组变量硬编码到用户函数中:
lowerFn <- function(data, mapping, method = "lm", ...) {
p <- ggplot(data = data, mapping = mapping) +
geom_point(aes(colour=Species)) +
geom_smooth(method = method, aes(colour=Species), ...)
p
}
ggpairs(
iris, columns=1:4,
lower = list(continuous =
wrap(lowerFn, method = "lm",
fullrange=TRUE, se=FALSE)))
注释:当你在geom_point
中添加colour
参数时
或 geom_smooth
在您的用户函数中,它将否决映射的 colour
例如比较以下结果
ggplot(iris, aes(Sepal.Length, Sepal.Width, col=Species)) +
geom_smooth(se=FALSE)
ggplot(iris, aes(Sepal.Length, Sepal.Width, col=Species)) +
geom_smooth(col="red", se=FALSE)
问?如何在图表上输入回归线的键值?
如果您使用全局/顶级美学,您可以使用 ggpairs(iris, columns=1:4, aes(colour=Species), legend=1)
和普通 ggplot
theme
函数来控制它。这不能在这里完成,因为在自定义函数中使用了分组变量。但是,该包提供了一种使用 legend
参数添加自定义图例的方法;您可以在 ggpairs
之外生成一个虚拟图例,然后在绘图过程中添加它。
leg <- grab_legend(ggplot(data=iris, aes(x=NA, y=NA, colour=Species)) +
geom_line() + theme(legend.direction = "horizontal"))
ggpairs(
iris, columns=1:4, legend=leg,
lower = list(continuous =
wrap(lowerFn, method = "lm",
emap=aes(color=Species),
fullrange=TRUE, se=FALSE))) +
theme(legend.position = "top")