R 中使用ggvenn/venn/eulerr绘画韦恩图 202

2022-07-01  本文已影响0人  一车小面包人

1.使用ggvenn

原始的输入数据框:


image.png
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()
ggvenn.png

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()
eulerr.png
上一篇 下一篇

猜你喜欢

热点阅读