跟著Nature Communications學作圖:R語言ggplot2畫流程圖

論文

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

image.png

當然這個圖用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)
image.png

這里有個問題是背景顏色條和文本的寬度是一致的,如何單獨調整背景的顏色條的寬度暫時想不到辦法了,我的辦法是給文本前后加空格

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
image.png

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

image.png

添加數(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
image.png

拼圖

library(patchwork)

p2 + 
  p3+ theme_void()
image.png

結論

好像確實有點繁瑣,如果是真實數(shù)據(jù)不如直接用ppt畫,然后借助其他軟件拼圖劃算。如果是學習ggplot2可以嘗試

數(shù)據(jù)和代碼直接在推文里復制就可以,如果是學習ggplot2可以自己親自敲一遍試試

歡迎大家關注我的公眾號

小明的數(shù)據(jù)分析筆記本

小明的數(shù)據(jù)分析筆記本 公眾號 主要分享:1、R語言和python做數(shù)據(jù)分析和數(shù)據(jù)可視化的簡單小例子;2、園藝植物相關轉錄組學、基因組學、群體遺傳學文獻閱讀筆記;3、生物信息學入門學習資料及自己的學習筆記!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容