ggcor包最初是因?yàn)槟芸焖賹?shí)現(xiàn)19年Science一組合相關(guān)性圖(上圖所示)變得流行起來(lái),除此該包對(duì)熱圖、熱圖等等的可視化都是很方便快捷的,除了之前介紹過(guò)的幾種相關(guān)性圖幾種方式,此包也是個(gè)不錯(cuò)的選擇,且具獨(dú)特的風(fēng)格(特別是組合相關(guān)性圖、環(huán)形熱圖)。但是不知道因?yàn)楹畏N原因此包在Github上消失了....,到作者(厚缊)個(gè)人博客上瞅了瞅發(fā)現(xiàn)關(guān)于包的參數(shù)介紹示例等也都沒(méi)有了,在評(píng)論區(qū)里看到作者回答項(xiàng)目已不再提供任何代碼和任何資料,需要的可以去國(guó)內(nèi)的gitee和國(guó)外的github搜索看看有沒(méi)有別人存的代碼。幸運(yùn)的是也發(fā)現(xiàn)已經(jīng)有人將ggcor
項(xiàng)目fork到自己的gitee了并提供了地址,所以我們可以根據(jù)此網(wǎng)址安裝:
安裝
## Gitee
devtools::install_git("https://gitee.com/dr_yingli/ggcor")
library(ggcor)
# 版本號(hào)
> packageVersion('ggcor')
[1] ‘0.9.8.1’
注意: 發(fā)現(xiàn)Gitee上的這個(gè)包是 ‘0.9.8.1’ 版本 ,之前用過(guò)此包的同學(xué)也要留意下,因?yàn)榘姹咀兓枚嗪瘮?shù)可能已經(jīng)不能用或者做了變更,待會(huì)兒你就會(huì)發(fā)現(xiàn)這個(gè)問(wèn)題,所以同樣的代碼你可能重現(xiàn)不出圖形,使用時(shí)要注意你版本。可能最早的用戶用的都是[1] ‘0.9.5’
版本的,剛好我舊版本的R中也有這個(gè)老版本R包,所以我這里分別演示下新舊版本ggcor的作圖代碼,自己比較異同做選擇~~
## 之前的舊版本
> packageVersion('ggcor')
[1] ‘0.9.5’
## 自定義安裝,根據(jù)自己library的路徑進(jìn)行修改。
install.packages("E:/R/R-4.0.2/library/ggcor.zip", repos = NULL, type = "source")
新版ggcor(0.9.8.1)
相關(guān)性圖
quickcor(mtcars) + geom_square()
我們?quickor
可以看到作者提供的示例代碼
library(ggplot2)
library(patchwork)
# layer of tile
A <- quickcor(mtcars) + geom_colour()
# layer of circle and trim the lower triangle
B <- quickcor(mtcars, type = "upper") + geom_circle2()
# layer of ellipse and not show diagonal
C <- quickcor(mtcars, type = "lower", show.diag = FALSE) + geom_ellipse2()
# layer of square and reorder correlation matrix by cluster
D <- quickcor(mtcars, cluster = TRUE) + geom_square()
# layer of confidence box
E <- quickcor(mtcars, cor.test = TRUE) + geom_confbox()
# different layer of upper/lower triangle
F <- quickcor(mtcars, cor.test = TRUE) +
geom_square(data = get_data(type = "lower", show.diag = FALSE)) +
geom_mark(data = get_data(type = "upper", show.diag = FALSE)) +
geom_abline(slope = -1, intercept = 12)
(A+B+C)/(E+D+F)+ plot_annotation(tag_levels = 'A')
組合相關(guān)性圖(Mantel.test)
library(dplyr)
library(vegan)
library(ggplot2)
#> Warning: package 'dplyr' was built under R version 3.6.2
data("varechem", package = "vegan")
data("varespec", package = "vegan")
mantel <- mantel_test(varespec, varechem, mantel.fun = 'mantel.randtest',spec.dist.method = 'bray', env.dist.method = 'euclidean',
spec.select = list(Spec01 = 1:7,
Spec02 = 8:18,
Spec03 = 19:37
)) %>%
mutate(r_value = cut(r, breaks = c(-Inf, 0.25, 0.5, Inf),
labels = c('<0.25', '0.25-0.5', '>=0.5'), right = FALSE),
p_value = cut(p.value, breaks = c(-Inf, 0.001, 0.01, 0.05, Inf),
labels = c('<0.001', '0.001-0.01', '0.01-0.05', '>=0.05'), right = FALSE))
quickcor(varechem, type = "upper") +
geom_square() +
anno_link(aes(colour = p_value, size = r_value), data = mantel) +
scale_size_manual(values = c(0.5, 1, 2)) +
scale_colour_manual(values = c("#D95F02", "#1B9E77", "#A2A2A288")) +
guides(size = guide_legend(title = "Mantel's r",
override.aes = list(colour = "grey35"),
order = 2),
colour = guide_legend(title = "Mantel's p",
override.aes = list(size = 3),
order = 1),
fill = guide_colorbar(title = "Pearson's r", order = 3))
環(huán)狀熱圖
# 需要安裝ambient包
install.packages('ambient')
library(ambient)
rand_correlate(100, 8) %>% ## require ambient packages
quickcor(circular = TRUE, cluster = TRUE, open = 45) +
geom_colour(colour = "white", size = 0.125) +
anno_row_tree() +
anno_col_tree() +
set_p_xaxis() +
set_p_yaxis()
舊版本ggcor(0.9.5)
相關(guān)性圖
基本函數(shù)沒(méi)有變化,不再過(guò)多討論
quickcor(mtcars) + geom_square()
組合相關(guān)性圖
這部分函數(shù)和0.9.8.1版本相比是變化最多的,如combination_layout
、geom_start_point
等函數(shù)在新版本中都沒(méi)有了,大家也可以自己動(dòng)手實(shí)踐下找找差別。
library(vegan) ## 獲取數(shù)據(jù)
library(ggcor)
data("varespec")
data("varechem")
corr <- correlate(varechem, cor.test = TRUE) %>%
as_cor_tbl(type = "upper", show.diag = FALSE)
mantel2 <- mantel_test(varespec, varechem, mantel.fun = 'mantel.randtest',spec.dist.method = 'bray', env.dist.method = 'euclidean',
spec.select = list(Spec01 = 1:7,
Spec02 = 8:18,
Spec03 = 19:24))%>%
mutate(r = cut(r, breaks = c(-Inf, 0.25, 0.5, Inf),
labels = c('<0.25', '0.25-0.5', '>=0.5'), right = FALSE),
p.value = cut(p.value, breaks = c(-Inf, 0.001, 0.01, 0.05, Inf),
labels = c('<0.001', '0.001-0.01', '0.01-0.05', '>=0.05'), right = FALSE))
#對(duì)于重要的相關(guān)系數(shù)的取舍,除了選擇了直接剔除或者不在圖中展示。此外,也可以選擇將它們保留在圖中,使用其它顏色區(qū)分即可。
df <- combination_layout(mantel2, cor_tbl = corr) ## 這里需要存儲(chǔ)下結(jié)果
quickcor(corr) + geom_square() + #還有更多樣式,和 corrplot 包中的風(fēng)格是一致的
geom_link(aes(colour = p.value,size = r), data = df) + # 添加連接線
geom_start_point(fill = "red", shape = 23, size = 4, data = df) + # 設(shè)置起始點(diǎn)顏色
geom_end_point(fill = "blue", shape = 21, size = 4, data = df) + # 設(shè)置終點(diǎn)顏色
geom_start_label(aes(x = x - 0.5), hjust = 1, size = 5, data = df) +
#scale_fill_gradient2(midpoint = 0, low = 'blue', mid = 'white', high = 'red', space = 'Lab')+
scale_fill_gradient2(midpoint = 0, low = "#56B4E9", mid = "white",high = "#E69F00", space = "Lab" )+
#scale_color_gradient(low = 'red', high = 'blue') +
scale_color_manual(values=c("#56B4E9", "#E69F00", "#999999"))+
scale_size_manual(values = c(0.1, 0.5, 1)) +
geom_end_label(aes(x = xend + 0.5), hjust = 0, size = 3.8, data = df) +
expand_axis(x = c(-6, 14.5)) +
remove_y_axis()
對(duì)稱環(huán)形熱圖
library(ggcor)
#計(jì)算相關(guān)系數(shù)
cor <- correlate(mtcars,method = 'spearman') %>% trans_polar()
# 繪制環(huán)形熱圖
correlate(mtcars) %>%
polarcor() + geom_arc_colour(aes(fill = r))
非對(duì)稱環(huán)形熱圖
基本圖形
library(ggplot2)
data("varespec", package = "vegan")
data("varechem", package = "vegan")
correlate(varechem, varespec) %>%
polarcor() +
geom_arc_colour(aes(fill = r), size = 0.25) +
coord_fixed(xlim = c(-1.2, 1.2), ylim = c(-1.2, 1.2))
避免標(biāo)簽的位置重疊
# 通過(guò)`set_arc_axis_x()`、`set_arc_axis_y()`函數(shù)來(lái)設(shè)置尺寸
correlate(varechem, varespec) %>%
polarcor(no.axis = TRUE) +
geom_arc_colour(aes(fill = r), size = 0.25) +
set_arc_axis_x() +
set_arc_axis_y(size = 2.8) +
coord_fixed(xlim = c(-1.2, 1.2), ylim = c(-1.2, 1.2))
設(shè)置分組的情況
set.seed(20201014)
grp <- sample(LETTERS[1:3], 24, replace = TRUE)
grp
fortify_cor(varechem, varespec, group = grp) %>%
polarcor(no.axis = TRUE, split.by.group = TRUE, group.space = 2) +
geom_arc_colour(aes(fill = r), colour = "grey90", size = 0.1) +
set_arc_axis_x(mapping = aes(colour = .group), size = 2.8) +
set_arc_axis_y(size = 2.8) +
coord_fixed(xlim = c(-1.2, 1.2), ylim = c(-1.2, 1.2))
對(duì)于相關(guān)系數(shù)顯著性p<0.05的加上標(biāo)簽
correlate(varechem, varespec, cor.test = TRUE) %>%
polarcor(no.axis = TRUE) +
geom_arc_colour(aes(fill = r), size = 0.25) +
geom_point(mapping = aes(x, y), shape = 17,
data = function(data) filter(data, p.value < 0.05)) +
set_arc_axis_x() +
set_arc_axis_y(size = 2.8) +
scale_fill_gradient2n(colours = c("#E9A3C9", "#F7F7F7", "#A1D76A")) +
coord_fixed(xlim = c(-1.2, 1.2), ylim = c(-1.2, 1.2))
添加相關(guān)性系數(shù)及顯著性符號(hào)
correlate(mtcars, cor.test = TRUE) %>%
polarcor(cluster = TRUE) +
geom_arc_colour(aes(fill = r), size = 0.25) +
geom_mark(aes(x, y, r = r, p.value = p.value, angle = angle),
size = 3) +
scale_fill_gradient2n(colours = c("#E9A3C9", "#F7F7F7", "#A1D76A")) +
coord_fixed(xlim = c(-1.05, 1.05), ylim = c(-1.05, 1.05))
相比之下,我更喜歡舊版本ggcor一些,因?yàn)樗暮瘮?shù)名稱會(huì)更容易理解一點(diǎn),而且可實(shí)現(xiàn)的風(fēng)格會(huì)稍多一些,不過(guò)用舊版本的較多,也可能新版本的函數(shù)我還了解不夠,大家還是根據(jù)個(gè)人喜好安裝對(duì)應(yīng)的版本,建議如果電腦上裝有多個(gè)版本的R的話,也可以將新舊版本的ggcor分別裝在不同版本的R library中,更便于管理
生活很好,等你超越