跟着Nature Genetics 学画图:R语言ggplot2散点图展示PCA结果

论文是
Whole-genome resequencing of 445 Lactuca accessions reveals the domestication history of cultivated lettuce

image.png

这篇论文的数据是公开的,代码也公开了一部分,那我们就可以按照他的代码来学二代测序的数据分析啦

今天我们来学习一些论文中 Fig1c 的画图代码,如下

image.png

数据对应的是论文中的 source data figure1

图的主要内容是散点图展示主成分分析的结果,并且将局部的区域放大展示

首先是读入数据
df<-readxl::read_excel("NG/41588_2021_831_MOESM4_ESM.xlsx",
                       sheet = "Fig1c",
                       n_max = 441)
head(df)
tail(df)

这里直接读入excel文件用到的是readxl包中的read_excel()函数,需要制定

  • 文件路径
  • excel表格中的sheet名称

这里的n_max参数是指定读进来的数据的最多行数,英文这个数据集结尾处有一些注释内容,我们不需要,所以需要制定这个参数,自己的数据集通常是不需要指定这个参数的

先画一个简单的散点图
library(ggplot2)
ggplot(data=df,aes(x=PC1,y=PC2))+
  geom_point(aes(color=Species))
image.png

这个看着和论文中的有些不一样,仔细看看应该是 论文中对 PC1去了一个负数,而且论文中的图也映射了点的形状

对PC1取一个负数
library(dplyr)
df %>% 
  mutate(PC1.1 = - PC1) -> df

画图

ggplot(data=df,aes(x=PC1.1,y=PC2))+
  geom_point(aes(color=Species,shape=Species))
image.png

这里会遇到一个警告信息

Warning messages: 1: The shape palette can deal with a maximum of 6 discrete values because more than 6 becomes difficult to discriminate; you have 9. Consider specifying shapes manually if you must have them. 2: Removed 369 rows containing missing values (geom_point).

形状超过留个就难以区分了,如果你非要用超过6个的形状,这里需要手动指定

这里是9个形状
手动指定

ggplot(data=df,aes(x=PC1.1,y=PC2))+
  geom_point(aes(color=Species,shape=Species),
             size=5)+
  scale_shape_manual(values=15:23)
image.png
接下来是简单的美化了
ggplot(data=df,aes(x=PC1.1,y=PC2))+
  geom_point(aes(color=Species,shape=Species),
             size=5)+
  scale_shape_manual(values=15:23)+
  theme_bw()+
  theme(legend.position = "none",
        panel.grid = element_blank())+
  labs(x="PC1 37.01% of variance",
       y="PC2 22.09% of variance")+
  geom_rect(aes(xmin=0,xmax=0.04,ymin=-0.01,ymax=0.02),
            fill="white",alpha=0,
            color="black")+
  annotate(geom="text",x=0.01,y=0.01,label="GP1")+
  annotate(geom="text",x=-0.09,y=0.05,
           label="italic(L.saligna)",parse=T,
           color="#00b9e3")+
  annotate(geom="text",x=-0.02,y=-0.075,
           label="italic(L.georgica)",parse=T,
           color="#00ba38")+
  annotate(geom="text",x=-0.07,y=-0.14,
           label="italic(L.virosa)",parse=T,
           color="#ff82cf")
image.png

那接下来是如何放大展示呢?想到了两种方案

  • 第一个是拼图
  • 第二个是借助ggforce这个包里的facet_zoom()函数
    可以参考 https://github.com/thomasp85/ggforce/pull/202

具体如何实现有时间再来研究吧!

欢迎大家关注我的公众号

小明的数据分析笔记本

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

你可能感兴趣的:(跟着Nature Genetics 学画图:R语言ggplot2散点图展示PCA结果)