前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >easylabel--为散点图/火山图添加标记!

easylabel--为散点图/火山图添加标记!

作者头像
作图丫
发布2022-03-29 09:55:26
9250
发布2022-03-29 09:55:26
举报
文章被收录于专栏:作图丫

导语

GUIDE ╲

在R语言绘图中的一个常见问题是用大量点或标签标记散点图。

背景介绍

在我们的科研中,常常遇到需要用散点图、火山图或者曼哈顿图进行数据可视化,就会碰到一个问题,在众多的点中,哪些才是我们想要找到的呢?今天小编给大家介绍的这个R包easylabel,可以轻松标记散点图以及快速绘制火山图和 MA 图以进行基因表达分析。使用交互式shiny和绘图界面,我们可以将鼠标悬停在点上以查看特定点的位置,然后单击点以轻松标记它们。 还提供了一种直接导出为 PDF 以供发表的简单方法。

R包安装

代码语言:javascript
复制
install.packages("easylabel")
library(easylabel)

可视化介绍

01

散点图

使用 easylabel() 打开一个shiny的应用程序并绘制和标记散点图。

代码语言:javascript
复制
data(mtcars)
easylabel(mtcars, x = 'mpg', y = 'wt',
          colScheme = 'royalblue')

调整颜色

代码语言:javascript
复制
easylabel(mtcars, x = 'mpg', y = 'wt',
          col = 'cyl')

形状

代码语言:javascript
复制
# gapminder data set
if(!require(gapminder)) {install.packages("gapminder")}
library(gapminder)
easylabel(gapminder[gapminder$year == 2007, ], x = 'gdpPercap', y = 'lifeExp',
          col = 'continent', shape = 'continent',
          size = 10,
          labs = 'country', 
          zeroline = FALSE)

大小设置

代码语言:javascript
复制
library(gapminder)
easylabel(gapminder[gapminder$year == 2007, ], x = 'gdpPercap', y = 'lifeExp',
          col = 'continent', labs = 'country', 
          size = 'pop',
          alpha = 0.6,
          zeroline = FALSE)

坐标轴设置标题

代码语言:javascript
复制
easylabel(xymatrix, x = 'x', y = 'y', col = 'col',
          colScheme = c('darkgrey', 'green3', 'gold3', 'blue'),
          xlab = expression("log"[2] ~ " fold change post-Rituximab"),
          ylab = expression("log"[2] ~ " fold change post-Tocilizumab"),
          showgrid = TRUE)

02

火山图

示例数据

代码语言:javascript
复制
# Example DESeq2 object
head(volc1)
##               baseMean log2FoldChange     lfcSE         stat     pvalue
## 5_8S_rRNA   0.01625099     0.02726923 2.9811510  0.009147217 0.99270168
## 5S_rRNA     3.66321881     0.05989097 0.4115732  0.145517159 0.88430257
## 7SK        12.96667458    -0.46156215 1.3668722 -0.337677614 0.73560615
## A1BG      290.75694559     0.23486554 0.3514587  0.668259368 0.50396804
## A1BG-AS1  170.77906789     0.11800652 0.2001594  0.589562618 0.55548392
## A1CF        4.56855647    -1.23495475 0.4855212 -2.543565265 0.01097276
##                padj
## 5_8S_rRNA        NA
## 5S_rRNA   0.9823854
## 7SK       0.9528927
## A1BG      0.8956205
## A1BG-AS1  0.9117136
## A1CF      0.4531638

# Example limma object
head(volc2)
##               logFC  AveExpr         t      P.Value   adj.P.Val           B
## A1BG      0.7697662 6.389039  4.692064 0.0011239293 0.008610736 -1.16895727
## A1BG-AS1  0.5298897 3.610850  4.688657 0.0011293516 0.008638889 -0.85241114
## AAAS     -0.4162720 5.349529 -5.578986 0.0003398373 0.004148831  0.17585449
## AACS     -0.2049703 3.690271 -1.465073 0.1768461859 0.299064278 -5.88763988
## AAGAB     0.2970478 5.538436  5.446618 0.0004033869 0.004553688 -0.02478892
## AAK1      0.1969886 1.861988  1.286456 0.2302992497 0.362402197 -5.74356735
代码语言:javascript
复制
#MA plots
easyMAplot(volc2, useQ = TRUE)

配色方案

代码语言:javascript
复制
easyVolcano(volc2,
            useQ = TRUE,
            fccut = 0,
            main = "Volcano title")

添加左右注释

代码语言:javascript
复制
easyVolcano(volc1,
            useQ = TRUE, fullGeneNames = TRUE,
            Ltitle = expression(symbol("\254") ~ "Non-responder"),
            Rtitle = expression("Responder" ~ symbol("\256")),
            LRtitle_side = 1,
            cex.lab = 0.9, cex.axis = 0.8,
            fccut = c(1, 2), fdrcutoff = 0.2,
            ylim = c(0, 6), xlim = c(-5, 5),
            colScheme = c('darkgrey', 'blue', 'orange', 'red'))

添加标签框

代码语言:javascript
复制
# Simple outlines
easyVolcano(volc2, useQ = TRUE, fccut = 0,
            rectangles = TRUE)

# Red outlined labels, rounded ends
easyVolcano(volc2, useQ = TRUE, fullGeneNames = TRUE,
            rectangles = TRUE,
            padding = 5,
            border_radius = 10,
            line_col = 'red',
            border_col = 'red',
            text_col = 'red')
代码语言:javascript
复制
# Transparent grey rectangles, rounded ends
easyMAplot(volc2, fdrcut = c(0.05, 0.01, 0.001), size = 6, useQ = TRUE,
           alpha = 0.75, outline_col = NA,
           fullGeneNames = TRUE,
           colScheme = c('darkgrey', brewer.pal(9, 'RdYlBu')[c(7:9, 3:1)]),
           rectangles = TRUE,
           border_col = NA,
           padding = 5,
           rect_col = adjustcolor('grey', alpha.f = 0.6),
           border_radius = 20)

# White text on black background, no rounding
easyVolcano(volc2, useQ = TRUE, fullGeneNames = TRUE,
            fccut = 0,
            rectangles = TRUE,
            padding = 4,
            border_radius = 0,
            rect_col = 'black',
            text_col = 'white',
            border_col = NA)

03

曼哈顿图

可以使用函数 easyManhattan() 标记曼哈顿图。

代码语言:javascript
复制
# https://www.ebi.ac.uk/gwas/studies/GCST003156
library(data.table)
SLE_gwas <- fread('../bentham_2015_26502338_sle_efo0002690_1_gwas.sumstats.tsv')
# Simple Manhattan plot
easyManhattan(SLE_gwas)
# 4 colours for chromosomes
easyManhattan(SLE_gwas, chromCols = RColorBrewer::brewer.pal(4, 'Paired'))

Locus plots

代码语言:javascript
复制
# Create a locus plot over one chromosomal region
library(plotly)
p1 = easyManhattan(SLE_gwas[SLE_gwas$chrom == 6 & 
                              SLE_gwas$pos >= 28e6 & 
                              SLE_gwas$pos <= 34e6, ], 
                   output_shiny = FALSE, labs = "rsid", 
                   startLabels=c("rs115466242", "rs2853999"), 
                   npeaks = 3)
# To annotate genes in that region
source("https://raw.githubusercontent.com/KatrionaGoldmann/BioOutputs/master/R/bio_gene_locations.R")
library(ggbio)
library(gginnards)
library(ggrepel)
if (! "EnsDb.Hsapiens.v75" %in% rownames(installed.packages()))
  BiocManager::install("EnsDb.Hsapiens.v75")

p2 = bio_gene_locations(6, c(28e6, 34e6),  
                        subset_genes = c('HLA-F', 'HLA-G', 'HLA-A', 'HLA-E', 
                                         'HLA-C', 'HLA-B', 'HLA-DRA', 
                                         'HLA-DRB5', 'HLA-DRB1', 'HLA-DQA1', 
                                         'HLA-DQB1', 'HLA-DQA2', 'HLA-DQB2', 
                                         'HLA-DOB', 'HLA-DMB', 'HLA-DMA', 
                                         'HLA-DOA', 'HLA-DPA1', 'HLA-DPB1')) 

plotly::subplot(p1, p2$plotly_location %>% layout(yaxis=list(range=c(0.25, 2))), 
                shareY = T, titleX = T, margin=0.05,
                nrows=2, heights=c(0.7, 0.3)) 

小编总结

easylabel通过shiny的形式,可以自由的进行可视化调整,对于以上示例我们可以看到,easylabel的画图美观效果是很好的,基本不需要后期进行调整,大家可以自己动手尝试一下哦!

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

本文分享自 作图丫 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Locus plots
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档