您沒有正確使用wrap
- see the vignette for details。也爲對角線你現在使用的功能barDiag
(但ggpairs
給人非常有幫助的錯誤,告訴這個)
因此,對於你的例子,我們可以改變在較低 板之分colour
和的的fill
下面
library(GGally)
library(ggplot2)
ggpairs(swiss[1:3],
lower=list(continuous=wrap("smooth", colour="blue")),
diag=list(continuous=wrap("barDiag", fill="blue")))
然而酒吧,平滑的顏色是硬編碼(見ggally_smooth
),以改變其顏色 你需要定義你自己的函數來傳遞。所以from here
my_fn <- function(data, mapping, pts=list(), smt=list(), ...){
ggplot(data = data, mapping = mapping, ...) +
do.call(geom_point, pts) +
do.call(geom_smooth, smt)
}
# Plot
ggpairs(swiss[1:4],
lower = list(continuous =
wrap(my_fn,
pts=list(size=2, colour="red"),
smt=list(method="lm", se=F, size=5, colour="blue"))),
diag=list(continuous=wrap("barDiag", fill="blue")))
以類似的方式,這裏有一個方法來定義一個新的上相關功能(類似於你有什麼)
cor_fun <- function(data, mapping, method="pearson", ndp=2, sz=5, stars=TRUE, ...){
data <- na.omit(data[,c(as.character(mapping$x), as.character(mapping$y))])
x <- data[,as.character(mapping$x)]
y <- data[,as.character(mapping$y)]
corr <- cor.test(x, y, method=method)
est <- corr$estimate
lb.size <- sz* abs(est)
if(stars){
stars <- c("***", "**", "*", "")[findInterval(corr$p.value, c(0, 0.001, 0.01, 0.05, 1))]
lbl <- paste0(round(est, ndp), stars)
}else{
lbl <- round(est, ndp)
}
ggplot(data=data, mapping=mapping) +
annotate("text", x=mean(x), y=mean(y), label=lbl, size=lb.size,...)+
theme(panel.grid = element_blank())
}
ggpairs(swiss,
lower=list(continuous=wrap("smooth", colour="blue")),
diag=list(continuous=wrap("barDiag", fill="blue")),
upper=list(continuous=cor_fun))
非常感謝,這是非常清楚的,並提供有效的解決方案 – pachamaltese
你太客氣 – user20650