跟着Nature Genetics学画图:R语言ggplot2画点和连线展示群体间Fst值和群体内Pi值

看论文

Genomic insights into the origin, domestication and diversification of Brassica juncea

image.png

本地pdf文件 s41588-021-00922-y.pdf

今天的推文试着模仿一下 论文中的 Figure2d

image.png

好多有关群体遗传的论文里都有这个图,每一个点是群体内的多样性用pi来衡量,连线表示群体之间的分化程度 用fst来表示

构造数据集

数据集完全是随便编的,没有任何意义

pi值数据格式
image.png
FST数据格式
image.png

读取数据集

首先是pi值

library(readxl)

dfpi<-read_excel("20210913.xlsx",
                 sheet = "Sheet1")
dfpi

添加坐标

dfpi$x<-2*sin(seq(0,300,60)*pi/180)
dfpi$y<-2*cos(seq(0,300,60)*pi/180)

作图

library(ggplot2)

cols<-c("#666116","#232c86","#e6eb49",
        "#f1a3bc","#f48b19","#64bea0")

ggplot()+
  geom_point(data=dfpi,
             aes(x=x,y=y,color=Population),
             size=40,
             show.legend = F)+
  xlim(-2.5,2.5)+ylim(-2.5,2.5)+
  theme_void()+
  geom_text(data=dfpi,aes(x=x,y=y,label=Population),
            vjust=-0.5,
            color="red")+
  geom_text(data=dfpi,aes(x=x,y=y,
                          label=paste0(round(pi_value*1000,2),
                                       '~x~',
                                       '10**-3')),
            vjust=1,
            parse=T,
            color="red")+
  scale_color_manual(values=cols)
image.png

接下来是构造连线数据

library(tidyverse)

read_excel("20210913.xlsx",
            sheet = "Sheet2") %>% 
  pivot_longer(!pop,
               names_to = "pop2",
               values_to = "Fst",
               values_drop_na = T) -> dffst
merge(dffst,dfpi,by.x="pop",by.y = "Population") %>% 
  select(pop,pop2,Fst,x,y) %>% 
  rename("x1"="x",
         "y1"="y") %>% 
  merge(dfpi,by.x = "pop2",by.y = "Population") %>% 
  select(pop,pop2,Fst,x,y,x1,y1) -> dffst1

将连线和点图结合到一起



ggplot()+
  geom_segment(data=dffst1,
               aes(x=x,y=y,xend=x1,yend=y1),
               size=1,
               lty="dashed")+
  geom_point(data=dfpi,
             aes(x=x,y=y,color=Population),
             size=40,
             show.legend = F)+
  xlim(-2.5,2.5)+ylim(-2.5,2.5)+
  theme_void()+
  geom_text(data=dfpi,aes(x=x,y=y,label=Population),
            vjust=-0.5,
            color="red")+
  geom_text(data=dfpi,aes(x=x,y=y,
                          label=paste0(round(pi_value*1000,2),
                                       '~x~',
                                       '10**-3')),
            vjust=1,
            parse=T,
            color="red")+
  scale_color_manual(values=cols)
image.png

最后将Fst的值添加到图上

这里如何将文本添加到合适的位置我还想不到比较好的办法了,只能先用代码添加 然后出图后再用AI软件来编辑了

library(ggrepel)

ggplot()+
  geom_segment(data=dffst1,
               aes(x=x,y=y,xend=x1,yend=y1),
               size=1,
               lty="dashed")+
  geom_text_repel(data=dffst1,aes(x=(x+x1)/2,
                                  y=(y+y1)/2,
                                  label=Fst))+
  geom_point(data=dfpi,
             aes(x=x,y=y,color=Population),
             size=40,
             show.legend = F)+
  xlim(-2.5,2.5)+ylim(-2.5,2.5)+
  theme_void()+
  geom_text(data=dfpi,aes(x=x,y=y,label=Population),
            vjust=-0.5,
            color="red")+
  geom_text(data=dfpi,aes(x=x,y=y,
                          label=paste0(round(pi_value*1000,2),
                                       '~x~',
                                       '10**-3')),
            vjust=1,
            parse=T,
            color="red")+
  scale_color_manual(values=cols)
image.png

本篇推文完整的示例数据和代码可以在公众号后台留言20210913获得

欢迎大家关注我的公众号
小明的数据分析笔记本

小明的数据分析笔记本 公众号 主要分享:1、R语言和python做数据分析和数据可视化的简单小例子;2、园艺植物相关转录组学、基因组学、群体遗传学文献阅读笔记;3、生物信息学入门学习资料及自己的学习笔记!

你可能感兴趣的:(跟着Nature Genetics学画图:R语言ggplot2画点和连线展示群体间Fst值和群体内Pi值)