論文
A highly conserved core bacterial microbiota with nitrogen-fixation capacity inhabits the xylem sap in maize plants
https://www.nature.com/articles/s41467-022-31113-w
本地pdf s41467-022-31113-w.pdf
數(shù)據(jù)代碼鏈接
https://github.com/PlantNutrition/Liyu
今天的推文我們來復現(xiàn)一下論文中的Figure2B

當然這個圖用ppt很容易實現(xiàn)。用ggplot2來做會稍微繁瑣一點,但是后續(xù)多圖組合會方便很多
流程圖就是文本和箭頭的組合,可以借助geom_text()函數(shù)和geom_segment()函數(shù)來做
首先是文本標簽
library(ggplot2)
ggplot()+
geom_label(aes(x=0,y=0),label=" VE ",
color="white",
fontface="bold",
fill="#547e34",
size=5,
label.size = 0)

這里有個問題是背景顏色條和文本的寬度是一致的,如何單獨調整背景的顏色條的寬度暫時想不到辦法了,我的辦法是給文本前后加空格
https://stackoverflow.com/questions/48195587/how-to-set-a-standard-label-size-in-ggplots-geom-label
這個鏈接里重新自己定義了一個函數(shù),關于自己寫ggplot2的繪圖函數(shù)我還看不明白
添加箭頭
ggplot()+
geom_label(aes(x=0,y=0),label=" VE ",
color="white",
fontface="bold",
fill="#547e34",
size=5,
label.size = 0)+
geom_label(aes(x=1,y=0),label=" SE ",
color="white",
fontface="bold",
fill="#547e34",
size=5,
label.size = 0)+
geom_label(aes(x=0.5,y=1),label=" LE ",
color="white",
fontface="bold",
fill="#a4c98a",
size=5,
label.size = 0)+
geom_label(aes(x=0.5,y=2),label=" P ",
color="white",
fontface="bold",
fill="#a4c98a",
size=5,
label.size = 0)+
geom_label(aes(x=0.5,y=-1),label=" RE ",
color="white",
fontface="bold",
fill="#b9860c",
size=5,
label.size = 0)+
geom_label(aes(x=-0.4,y=-1),label=" RS ",
color="white",
fontface="bold",
fill="#8b814b",
size=5,
label.size = 0)+
geom_label(aes(x=-1.2,y=-1),label=" BS ",
color="white",
fontface="bold",
fill="#8b814b",
size=5,
label.size = 0)+
xlim(-1.5,1.5)+
ylim(-1.5,2.2)+
geom_segment(aes(x=0.2,xend=0.8,y=0.05,yend=0.05),
arrow = arrow(angle=30,type = "closed",
length = unit(3,'mm')),
color="#516896")+
geom_segment(aes(x=0.8,xend=0.2,y=-0.05,yend=-0.05),
arrow = arrow(angle=30,type = "closed",
length = unit(3,'mm')),
color="#516896")+
geom_segment(aes(x=0,xend=0.5,y=0.1,yend=0.9),
arrow = arrow(angle=30,type = "closed",
length = unit(3,'mm')),
color="#516896")+
geom_segment(aes(x=0.4,xend=-0.1,y=0.9,yend=0.1),
arrow = arrow(angle=30,type = "closed",
length = unit(3,'mm')),
color="#516896")+
geom_segment(aes(x=1.1,xend=0.6,y=0.1,yend=0.9),
arrow = arrow(angle=30,type = "closed",
length = unit(3,'mm')),
color="#516896")+
geom_segment(aes(x=0.5,xend=1,y=0.9,yend=0.1),
arrow = arrow(angle=30,type = "closed",
length = unit(3,'mm')),
color="#516896") -> p1
p1

https://cran.r-project.org/web/packages/ggarchery/readme/README.html
添加箭頭有一個專門的R包
這樣一個一個添加太麻煩,可以把數(shù)據(jù)整理好
new.dat.01<-data.frame(
x= c(0,0.4,1,0.5,0.5,-1.2,-1,-0.2),
xend=c(0.5,-0.1,0.6,0.9,0.5,0.3,-0.6,0.3),
y =c(-0.1,-0.9,-0.1,-0.9,1.9,2,-1,-1),
yend=c(-0.9,-0.1,-0.9,-0.1,1.1,2,-1,-1))
p1 +
geom_segment(data=new.dat.01,
aes(x=x,xend=xend,y=y,yend=yend),
arrow = arrow(angle=30,type = "closed",
length = unit(3,'mm')),
color="#516896")+
geom_segment(aes(x=-1.2,xend=-1.2,y=-0.9,yend=2),
color="#516896")-> p2
p2

添加數(shù)字文本
new.data.02<-data.frame(
x=c(-0.8,0,-0.5,0.7,-0.9,0.3,1.1,0.5),
y=c(-0.9,-0.9,2.1,1.5,0.5,0.3,0.4,0.5),
label=c(93.68,60.61,63.53,88.84,27.06,9.15,1.91,45.61)
)
p2 +
geom_text(data = new.data.02,
aes(x=x,y=y,label=paste0(label,"%"))) -> p3
p3

拼圖
library(patchwork)
p2 +
p3+ theme_void()

結論
好像確實有點繁瑣,如果是真實數(shù)據(jù)不如直接用ppt畫,然后借助其他軟件拼圖劃算。如果是學習ggplot2可以嘗試
數(shù)據(jù)和代碼直接在推文里復制就可以,如果是學習ggplot2可以自己親自敲一遍試試
歡迎大家關注我的公眾號
小明的數(shù)據(jù)分析筆記本
小明的數(shù)據(jù)分析筆記本 公眾號 主要分享:1、R語言和python做數(shù)據(jù)分析和數(shù)據(jù)可視化的簡單小例子;2、園藝植物相關轉錄組學、基因組學、群體遺傳學文獻閱讀筆記;3、生物信息學入門學習資料及自己的學習筆記!