您好,登錄后才能下訂單哦!
本篇文章為大家展示了怎么使用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/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())
按照這個思路是可以實現今天推文中提到的論文里的網絡圖的。今天時間有限,下面的代碼就不詳細介紹了,先記錄在這里
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())
所以如果有了網絡圖點和邊的數據,自己應該可以用ggplot2來做網絡圖了。
上述內容就是怎么使用R語言ggplot2畫網絡圖,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。