上周,我們寫了一個 ggcor 對相關性可視化的帖子 (【ggcor】相關性圖的另外一種展示)。裡面用到的例子是厚老師的示例數據。這次,我自己構建數據集,探索如何使用 ggcor 進行展示。
# 清空當前環境
rm(list = ls())
# 加載需要的包
library(WGCNA)
library(ggcor)
library(ggplot2)
library(tidyverse)
library(reshape2)
# 設置隨機數種子,保證結果的可重複性
set.seed(117423)
# 構造環境因子
env = data.frame(N = runif(10,1,10),
P = runif(10,1,10),
K = runif(10,1,10),
C = runif(10,1,10),
H2O = runif(10,1,10),
pH = runif(10,1,10))
# 構造物種信息
spec = data.frame(S1 = runif(10,1,10),
S2 = runif(10,1,10),
S3 = runif(10,1,10),
S4 = runif(10,1,10),
S5 = runif(10,1,10))
# 計算相關性和P值,相關性方法為「pearson」
cor = corAndPvalue(env, spec, method = 'pearson')
# 提取相關係數並改成長數據格式
c = cor[["cor"]] %>%
as.data.frame()
c$cat = rownames(c)
c = melt(c, id.vars = ncol(c))
colnames(c)[3] = 'cor'
c$temp = paste(c$cat, c$variable, sep = '_')
# 提取性關係顯著性並改成長數據格式
p = cor[["p"]] %>%
as.data.frame()
p$cat = rownames(p)
p = melt(p, id.vars = ncol(p))
colnames(p)[3] = 'pvalue'
p$temp = paste(p$cat, p$variable, sep = '_')
# 拼接相關性及p值並構造兩個值的分組範圍
cor.data = merge(c, p, by = 'temp') %>%
select(c(3,2,4,7))%>%
mutate(rd = cut(cor, breaks = c(-Inf, 0.2, 0.4, Inf),
labels = c("< 0.2", "0.2 - 0.4", ">= 0.4")),
pd = cut(pvalue, breaks = c(-Inf, 0.01, 0.05, Inf),
labels = c("< 0.01", "0.01 - 0.05", ">= 0.05")))
# 繪圖
quickcor(env, cor.test = T,type = 'upper', grid.colour = 'black') + # 計算環境因子相相關性
geom_circle2() + # 展示方式為圓圈
geom_mark(data = get_data(type = "upper",
show.diag = T),
size = 2.5, color = 'black') + # 添加相關性和顯著性
anno_link(aes(colour = pd, size = rd), data = cor.data) + # 添加左側的相關性信息
anno_link_label() + # 顯示左側標籤
scale_size_manual(values = c(0.5, 1, 2)) +
scale_colour_manual(values = c("#D95F02", "#1B9E77", "#A2A2A288")) +
guides(size = guide_legend(title = "Pearson's r",
override.aes = list(colour = "grey35"),
order = 2),
colour = guide_legend(title = "Pearson's p",
override.aes = list(size = 3),
order = 1),
fill = guide_colorbar(title = "Pearson's r", order = 3))