温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么使用R语言ggplot2画网络图

发布时间:2021-11-22 15:10:30 来源:亿速云 阅读:755 作者:柒染 栏目:大数据

本篇文章为大家展示了怎么使用R语言ggplot2画网络图,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

今天要模仿的图片来自于论文 Core gut microbial communities are maintained by beneficial interactions and strain variability in fish。期刊是 Nature microbiology

怎么使用R语言ggplot2画网络图  
image.png
怎么使用R语言ggplot2画网络图  
image.png

之前分享过两篇使用R语言的ggraph包画网络图的推文

R语言网络图的一个小例子

R语言做网络图的又一个小例子

(点击以上蓝色字体可以直达推文内容)

但是今天这个论文里的网络图是两个两个圆形的布局,这个用ggraph包如何来实现自己暂时还不知道。

仔细想了一下,这个网络图就是点和线的组合,使用ggplot2包的geom_point()geom_segment()函数应该可以比较方便的实现。因为是圆形的布局,所以散点的坐标直接用圆形函数来生成就好了。有了想法 下面实现一下。

 首先是构造数据集

散点的位置坐标用圆形函数来生成,圆心是(0,0)半径是4,总共生成32个点

a<-90/8
a
x1<-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))

}
x1
y1
df1<-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())
 
怎么使用R语言ggplot2画网络图  
image.png

按照这个思路是可以实现今天推文中提到的论文里的网络图的。今天时间有限,下面的代码就不详细介绍了,先记录在这里

library(dplyr)
library(ggplot2)
a<-90/8
a
x1<-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))

}
x1
y1
df1<-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/2
b
x2<-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))
}
x2
y2
df6<-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)
dfnode

x3<-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<-node1
dfedge$node2<-node2
dfedge$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())
   最终的结果是
怎么使用R语言ggplot2画网络图  
image.png

所以如果有了网络图点和边的数据,自己应该可以用ggplot2来做网络图了。

上述内容就是怎么使用R语言ggplot2画网络图,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI