R 中使用ggvenn/venn/eulerr绘画韦恩图 202
2022-07-01 本文已影响0人
一车小面包人
1.使用ggvenn
原始的输入数据框:

library(ggvenn)
inter<-intersect(mice$cluster,intersect(zebra$cluster,pigeon$cluster))
pdf("venn.pdf",height=10,width=12)
for(i in inter){
x<-list(mice[which(mice$cluster==i),"gene"],zebra[which(zebra$cluster==i),"gene"],pigeon[which(pigeon$cluster==i),"gene"])
names(x)<-c(paste0("mice_",i),paste0("zebra_",i),paste0("pigeon_",i))
pp<-ggvenn(x,fill_color=c("#0073C2FF","#EFC000FF","#868686FF","#CD534CFF"),stroke_size=0.5,set_name_size=4)
print(pp)
}
dev.off()

2.使用venn
library(gplots)
for(i in inter){
pp<-venn(list(mice[which(mice$cluster==i),"gene"],zebra[which(zebra$cluster==i),"gene"],pigeon[which(pigeon$cluster==i),"gene"]),names=c(paste0("mice_",i),paste0("zebra_",i),paste0("pigeon_",i)))
aa<-attr(pp,"intersections")
bb<-do.call(cbind,lapply(lapply(aa,unlist),`length<-`,max(lengths(aa))))
write.table(bb,paste0(i,"_venn.table"),row.names=F,col.names=T,quote=F)
}
这里有一个地方需要注意,如何将长度不一致的向量构建在data.frame中
bb<-do.call(cbind,lapply(lapply(aa,unlist),length<-
,max(lengths(aa))))
for exp:
>a<-c(1,2,3)
>b<-c(1,2,3,4,5,6)
>c<-c(1,2,3,4)
>aa<-list(a,b,c)
>names(aa)<-c("a","b","c")
>bb<-do.call(cbind,lapply(lapply(aa,unlist),`length<-`,max(lengths(aa))))
>print(bb)
>a b c
1 1 1
2 2 2
3 3 3
NA 4 4
NA 5 NA
NA 6 NA
3.使用eulerr
library(eulerr)
Venn <- function(lst.A, lst.B, lst.C){
A = lst.A %>% length()
B = lst.B %>% length()
C = lst.C %>% length()
AB = intersect(lst.A, lst.B) %>% length()
AC = intersect(lst.A, lst.C) %>% length()
BC = intersect(lst.B, lst.C) %>% length()
ABC = intersect(lst.A, lst.B) %>% intersect(., lst.C) %>% length()
euler(c(
"A" = A - AB - AC + ABC,
"B" = B - AB - BC + ABC,
"C" = C - AC - BC + ABC,
"A&B" = AB - ABC,
"A&C" = AC - ABC,
"B&C" = BC - ABC,
"A&B&C" = ABC
))%>% return()
}
pdf("venn.eulerr.pdf",height=10,width=12)
for(i in inter){
vd<-Venn(
lst.A=mice[which(mice$cluster==i),"gene"],
lst.B=zebra[which(zebra$cluster==i),"gene"],
lst.C=pigeon[which(pigeon$cluster==i),"gene"])
pp<-plot(vd,
labels=list(labels=c(paste0("mice_",i),paste0("zebra_",i),paste0("pigeon_",i)),col="gray20",font=2),
edges = list(col="gray60", lex=1),
fills = list(fill = c("#297CA0", "#BBBBBB", "#E9EA77"), alpha = 0.6),
quantities = list(cex=.8, col='gray20')
)
print(pp)
}
dev.off()
