❝最近有观众老爷询问绘制相关性分析网络图中的报错,本节就来解答如何处理这个问题,整个过程仅参考。希望对各位观众老爷能有所帮助。「数据代码已经整合上传到会员交流群」,购买过小编VIP的朋友可在所加的会员群内获取下载,有需要的朋友可关注文末介绍加入VIP交流群。 ❞
❝给予长期支持我们的忠实读者们一个特别待遇,我们提供了一个持续更新的数据可视化会员文档库。「这份文档包含数百个数据可视化文档,是学习和提升技能的理想选择」。一次性付费,您就可以长期享受到持续更新的资源,有效地提升您的R语言应用能力。 ❞
「2024更新的绘图内容同时包含数据+代码+markdown注释文档+文档清单」
Error in rcorr(t(df), type = "spearman") : must have >4 observations
报错信息表明rcorr函数在尝试计算Spearman相关性时遇到了问题,原因是数据中的某些变量(列)的观测值数量不足以进行相关性分析。具体来说rcorr 函数要求每个变量至少有5个观测值来计算相关性。
❝由于在进行实验设计时,通常多为设置3重复,若我们想分析每一组内不同样本之间的相关性就会频繁遇到这种问题,使用内置的R包则无法解决问题,因为需要我们进行自定义分析函数来进行相关性分析. ❞
library(tidyverse)
library(ggraph)
library(Hmisc)
library(igraph)
source("corrr.R")
df <- read_tsv("gene.xls") %>% column_to_rownames(var="id") %>%
filter(rowSums(.) >= 2)
df_cor <- corrr(t(df))
df_cor_r <- df_cor$r
df_cor_p <- df_cor$P
df_cor_r[df_cor_p>0.05|abs(df_cor_r)<0.7] = 0
edge_list <- df_cor_r %>%
as_tibble(rownames = "from") %>%
pivot_longer(cols = -from, names_to = "to", values_to = "weight") %>%
filter(weight != 0, from != to) # 过滤掉权重为0的边和自环
df_igraph <- graph_from_data_frame(edge_list, directed = FALSE)
df.weight <- E(df_igraph)$weight
edge_attributes <- tibble(weight = df.weight) %>%
mutate(
color = case_when(
weight > 0 ~ "#E6956F",
weight < 0 ~ "#788FCE",
TRUE ~ "gray"
),
width = abs(weight) * 2.5
)
node_sizes <- df %>%
rowSums() %>%
enframe(name = "name", value = "size") %>%
mutate(size = log10(size) * 2.5) %>%
filter(name %in% V(df_igraph)$name)
portraits <- create_layout(df_igraph, layout = 'circle')
ggraph(df_igraph, layout = "circle")+
geom_edge_arc(aes(color=color),edge_width = 0.4,show.legend = F,
curvature=0.2)+
geom_node_point(aes(size=size),shape = 21,show.legend =F,fill="#788FCE")+
scale_edge_colour_manual(values=c("#788FCE","red"))+
theme_graph()+
expand_limits(x = c(-1.2, 1.2), y = c(-1.2, 1.2))