前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >跟着Nature Plants学作图:R语言ggplot2画热图展示基因表达量

跟着Nature Plants学作图:R语言ggplot2画热图展示基因表达量

作者头像
用户7010445
发布2023-01-06 18:32:37
7340
发布2023-01-06 18:32:37
举报

论文

The flying spider-monkey tree fern genome provides insights into fern evolution and arborescence

https://www.nature.com/articles/s41477-022-01146-6#Sec44

数据下载链接

https://doi.org/10.6084/m9.figshare.19125641

今天的推文重复一下论文中的Figure3d

image.png

论文中提供的数据如下

image.png

读取数据集

代码语言:javascript
复制
library(readxl)

dat01<-read_excel("data/20220526/NaturePlantsFig3d.xlsx")
head(dat01)

论文中的图展示的是Z-score,数据应该是FPKM之类的,这里需要对数据集进行一个转化,这里关于zscore的计算我采用的公式是 以每个基因为单位,先取log2,然后是 (FPKM - mean(FPKM))/sd(FPKM) 这里我不确定这个转化做的对不对,这里的疑问是计算平均值和标准差的时候是用提供的所有基因的数据 还是用每个基因分别算平均值和标准差,我采用的是后者。

计算z-score

代码语言:javascript
复制
library(tidyverse)
library(stringr)
dat01 %>% 
  rowwise() %>% 
  mutate(mean_value = mean(c_across(2:16)),
         sd_value = sd(c_across(2:16))) %>% 
  mutate(across(2:16,~(.x-mean_value)/sd_value)) %>% 
  select(-c(mean_value,sd_value)) -> dat01.2

宽格式转换为长格式

代码语言:javascript
复制
dat01.2 %>% 
  reshape2::melt(id.vars="Gene") %>% 
  mutate(new_var=str_replace(variable,'-[123]','')) %>% 
  group_by(Gene,new_var) %>% 
  summarise(mean_value=mean(value)) %>%
  ungroup() -> dat01.3

接下来是作图代码

代码语言:javascript
复制
library(ggplot2)  
library(paletteer)

dat01.3$new_var<-factor(dat01.3$new_var,
                        levels = c("Ph","Sb","Xy","Pi","Le1"))

ggplot(data = dat01.3,
       aes(x=Gene,y=new_var))+
  geom_tile(aes(fill=mean_value),
            color="white")+
  scale_fill_paletteer_c("ggthemes::Classic Red-Green",
                         direction = -1,
                         name="Expression level (Z-score)",
                         limits=c(-2,2))+
  scale_y_discrete(position = "right")+
  labs(x=NULL,y=NULL)+
  theme_minimal()+
  theme(panel.grid = element_blank(),
        legend.position = "top",
        axis.text.x = element_text(angle = 60,
                                   hjust = 1,
                                   vjust=1),
        plot.margin = unit(c(0.2,0.2,0.2,1),'cm'))+
  guides(fill=guide_colorbar(title.position = "top",
                             title.hjust = 0.5,
                             barwidth = 10,
                             barheight = 0.5,
                             ticks = FALSE))

image.png

作图代码的详细介绍会以视频的形式放到B站,欢迎大家关注我的同名B站账号 小明的数据分析笔记本

示例数据可以去论文中下载,代码可以在推文中进行复制

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 论文
  • 数据下载链接
  • 论文中提供的数据如下
  • 读取数据集
  • 计算z-score
  • 宽格式转换为长格式
  • 接下来是作图代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档