前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >跟着Nature Genetics 学画图:R语言ggplot2散点图展示PCA结果

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

作者头像
用户7010445
发布2021-05-07 10:53:34
1.4K0
发布2021-05-07 10:53:34
举报
文章被收录于专栏:小明的数据分析笔记本

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

image.png

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

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

image.png

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

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

首先是读入数据
代码语言:javascript
复制
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参数是指定读进来的数据的最多行数,英文这个数据集结尾处有一些注释内容,我们不需要,所以需要制定这个参数,自己的数据集通常是不需要指定这个参数的

先画一个简单的散点图
代码语言:javascript
复制
library(ggplot2)
ggplot(data=df,aes(x=PC1,y=PC2))+
  geom_point(aes(color=Species))

image.png

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

对PC1取一个负数
代码语言:javascript
复制
library(dplyr)
df %>% 
  mutate(PC1.1 = - PC1) -> df

画图

代码语言:javascript
复制
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个形状 手动指定

代码语言:javascript
复制
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

接下来是简单的美化了
代码语言:javascript
复制
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、生物信息学入门学习资料及自己的学习笔记!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小明的数据分析笔记本 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首先是读入数据
  • 先画一个简单的散点图
  • 对PC1取一个负数
  • 接下来是简单的美化了
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档