本篇文章为大家展示了怎么使用R语言ggplot2画网络图,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
今天要模仿的图片来自于论文 Core gut microbial communities are maintained by beneficial interactions and strain variability in fish。期刊是 Nature microbiology
之前分享过两篇使用R语言的ggraph
包画网络图的推文
R语言网络图的一个小例子
R语言做网络图的又一个小例子
(点击以上蓝色字体可以直达推文内容)
但是今天这个论文里的网络图是两个两个圆形的布局,这个用ggraph
包如何来实现自己暂时还不知道。
仔细想了一下,这个网络图就是点和线的组合,使用
ggplot2
包的geom_point()
和geom_segment()
函数应该可以比较方便的实现。因为是圆形的布局,所以散点的坐标直接用圆形函数来生成就好了。有了想法 下面实现一下。
散点的位置坐标用圆形函数来生成,圆心是(0,0)半径是4,总共生成32个点
a<-90/8ax1<-c()y1<-c()for (i in 1:7){ x1<-append(x1,4*cos(i*a*pi/180)) y1<-append(y1,4*sin(i*a*pi/180))}x1y1df1<-data.frame(x=x1,y=y1)df2<-data.frame(x=x1,y=-y1)df3<-data.frame(x=-x1,y=y1)df4<-data.frame(x=-x1,y=-y1)df5<-data.frame(x=c(0,4,0,-4), y=c(4,0,-4,0))df11<-rbind(df1,df2,df3,df4,df5)df11$group<-"A"df11$color<-sample(c("A","B"),dim(df11)[1],replace = T)
ggplot(df11,aes(x,y))+ geom_point(aes(shape=color,color=color),size=5)+ theme(panel.background = element_blank(), axis.title = element_blank(), axis.text = element_blank(), axis.ticks = element_blank())
按照这个思路是可以实现今天推文中提到的论文里的网络图的。今天时间有限,下面的代码就不详细介绍了,先记录在这里
library(dplyr)library(ggplot2)a<-90/8ax1<-c()y1<-c()for (i in 1:7){ x1<-append(x1,4*cos(i*a*pi/180)) y1<-append(y1,4*sin(i*a*pi/180))}x1y1df1<-data.frame(x=x1,y=y1)df2<-data.frame(x=x1,y=-y1)df3<-data.frame(x=-x1,y=y1)df4<-data.frame(x=-x1,y=-y1)df5<-data.frame(x=c(0,4,0,-4), y=c(4,0,-4,0))df11<-rbind(df1,df2,df3,df4,df5)df11$group<-"A"df11$color<-sample(c("A","B"),dim(df11)[1],replace = T)b<-90/2bx2<-c()y2<-c()for (i in 1){ x2<-append(x2,1*cos(i*b*pi/180)) y2<-append(y2,1*sin(i*b*pi/180))}x2y2df6<-data.frame(x=x2+5,y=y2+5)df7<-data.frame(x=-x2+5,y=y2+5)df8<-data.frame(x=x2+5,y=-y2+5)df9<-data.frame(x=-x2+5,y=-y2+5)df10<-data.frame(x=c(0,1,0,-1)+5, y=c(1,0,-1,0)+5)df22<-rbind(df6,df7,df8,df9,df10)df22$group<-"B"df22$color<-sample(c("C","D"),dim(df22)[1],replace = T)df<-rbind(df11,df22)df$lable<-paste("Sample",1:dim(df)[1],sep="_")node1<-sample(df$lable,60,replace = T)node2<-sample(df$lable,60,replace = T)dfnode<-data.frame(node1,node2)dfnodex3<-c()y3<-c()xend<-c()yend<-c()for (i in 1:60){ label1<-dfnode[i,]$node1 #print(label1) label2<-dfnode[i,]$node2 #print(label2) dfnew1<-filter(df,lable==label1) #print("OK") dfnew2<-filter(df,lable==label2) x3<-append(x3,dfnew1$x) y3<-append(y3,dfnew1$y) xend<-append(xend,dfnew2$x) yend<-append(yend,dfnew2$y)}dfedge<-data.frame(x=x3,xend,y=y3,yend)dfedge$node1<-node1dfedge$node2<-node2dfedge$group<-sample(c("A","B","C"),dim(dfedge)[1],replace = T)ggplot()+ geom_segment(data=dfedge,aes(x=x,y=y,xend=xend,yend=yend), size=1,color="grey",alpha=0.5)+ geom_point(data=df, aes(x,y,shape=group, color=group), size=5)+ theme(panel.background = element_blank(), axis.text = element_blank(), axis.title = element_blank(), axis.ticks = element_blank())
所以如果有了网络图点和边的数据,自己应该可以用ggplot2来做网络图了。
上述内容就是怎么使用R语言ggplot2画网络图,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/4579431/blog/4865062