zoukankan      html  css  js  c++  java
  • GGPLOT2-plotly |让你的火山图“活”过来

    火山图(Volcano Plot)常用于展示基因表达差异的分布,横坐标常为Fold change(倍数),越偏离中心差异倍数越大;纵坐标为P值(P值),值越大差异越显着。原因得名也许的英文因为查询查询结果图像火山吧

    一载入R函数包及数据集

    library(ggplot2)data <- read.csv("火山图.csv",header=TRUE,row.names = 1)
    head(data) #查看数据类型,主要有P值,Fold change和基因ID即可。

    二ggplot2绘制火山图

    2.1绘制简单的火山图 - 点图

    ggplot(data = data, aes(x = logFC, y = -log10(adj.P.Val))) +geom_point(alpha=0.8, size = 1)

    和文献中的差距较大,以下几个方面可改进:

    答:上下调基因的区分;

    B:横轴,纵轴的阈值线;

    C:重点基因的标示。

    2.2细节优化火山图

    1)根据阈值设定上下调基因

    新增改列,利用ifelse函数添加基因的上下调情况,color进行区分,然后使用geom_hline()和geom_vline()参数添加阈值线,

    data$change <- as.factor(ifelse(data$adj.P.Val < 0.01 & abs(data$logFC) > 1,ifelse(data$logFC > 1,'UP','DOWN'),'NOT'))

    2)添加阈值线

    使用geom_hline()和geom_vline()参数添加阈值线

    ggplot(data = data, aes(x = logFC, y = -log10(adj.P.Val), color = change)) +  geom_point(alpha=0.8, size = 1) +  theme_bw(base_size = 15) +  theme(panel.grid.minor = element_blank(),panel.grid.major = element_blank()) +  geom_hline(yintercept=2 ,linetype=4) +geom_vline(xintercept=c(-1,1) ,linetype=4 ) +  scale_color_manual(name = "", values = c("red", "green", "black"), limits = c("UP", "DOWN", "NOT"))  

    3)标示重点显着差异基因

    上图是不是有点像了,新增注册列,利用ifelse函数添加重点显着差异基因,然后使用geom_text参数添加到图上,

    data$sign <- ifelse(data$adj.P.Val < 0.001 & abs(data$logFC) > 2.5,rownames(data),NA)
    ggplot(data = data, aes(x = logFC, y = -log10(adj.P.Val), color = change)) +  geom_point(alpha=0.8, size = 1) +  theme_bw(base_size = 15) +  theme(panel.grid.minor = element_blank(),panel.grid.major = element_blank()) +  geom_hline(yintercept=2 ,linetype=4) +geom_vline(xintercept=c(-1,1) ,linetype=4 ) +  scale_color_manual(name = "", values = c("red", "green", "black"), limits = c("UP", "DOWN", "NOT")) +geom_text(aes(label = sign), size = 3) 

    4)解决基因名重叠问题

    基本和纸一致,但是因为差异表达基因太多,存在重叠情况,现使用ř语言的ggrepel包解决标签太多导致的重叠问题。

    library(ggrepel)ggplot(data = data, aes(x = logFC, y = -log10(adj.P.Val), color = change)) +  geom_point(alpha=0.8, size = 1) +  theme_bw(base_size = 15) +  theme(panel.grid.minor = element_blank(),panel.grid.major = element_blank()) +  scale_color_manual(name = "", values = c("red", "green", "black"), limits = c("UP", "DOWN", "NOT")) +  geom_label_repel(aes(label=sign), fontface="bold", color="grey50", box.padding=unit(0.35, "lines"), point.padding=unit(0.5, "lines"), segment.colour = "grey50")

    5)标示感兴趣的基因的表达情况

    将我们感兴趣的基因添加到数据的标签列中,假设以下几个基因是我们重点关注的基因,单独查看以下基因的表达情况

    ggplot(data = data, aes(x = logFC, y = -log10(adj.P.Val), color = change)) +  geom_point(alpha=0.8, size = 1) +  theme_bw(base_size = 15) +  theme(panel.grid.minor = element_blank(),panel.grid.major = element_blank() ) +  scale_color_manual(name = "", values = c("red", "green", "black"), limits = c("UP", "DOWN", "NOT")) +  geom_label_repel(aes(label=LABEL), fontface="bold", color="grey50", box.padding=unit(0.35, "lines"), point.padding=unit(0.5, "lines"), segment.colour = "grey50")

    呐,到这里除了数据不一样,基本实现了文献中的火山图,是不是以为到这就结束了?NO!NO!NO!实现上述静态的就可以发论文去了!

    但是,,,

    汇报展示的时候,如果能动态交互式的展示所有显关系着基因的FC值和P值,是不是更酷炫!

    plotly绘制交互式火山图

    1)plot_ly函数画散点图

    library(plotly)plot_ly(data,x = ~logFC, y = ~-log10(adj.P.Val),text = ~sign, type = 'scatter',  mode = 'markers')

    会弹出一个网页,然后可以交互式的展示每个点的FC值和P值

    那可不可以在“纸”级静态火山图的基础上,实现交互式呢?当然可以!

    四,参考资料

    https://www.bioconductor.org/packages/release/bioc/vignettes/EnhancedVolcano/inst/doc/EnhancedVolcano.html

    [R | plotly

    更多关于生信,R,Python的内容请关注小号“生信补给站”,谢谢。

    其他可能感兴趣

    [R |绘图边距及布局

    R-基本绘图参数(Ⅰ)

    GGPLOT2 |从0开始绘制直方图

    GGPLOT2 |从0开始绘制折线图

    GGPLOT2 |从0开始绘制箱线图

    GGPLOT2 |绘制GO富集柱形图

    GGPLOT2 | 绘制KEGG气泡图

    GGPLOT2 |扩展包从0开始绘制雷达图

    绘图系列| R-corrplot相关图

    绘图系列| R-wordcloud2包绘制词云

    绘图系列| R-文氏图包绘制韦恩图

    [R | UpSet-集合可视化

  • 相关阅读:
    C# 打印PPT幻灯片
    Java 创建/识别条形码、二维码
    Java 添加Word文本框
    Java 复制PPT幻灯片
    C# 读取Word内容控件
    Java 操作Word书签(三):用文本、图片、表格替换书签
    Java 操作Word书签(二):添加文本、图片、表格到书签内容
    C#/Java 动态生成电子发票
    C# 复制Excel单元格格式
    Java 操作Word书签(一):添加、删除、读取书签
  • 原文地址:https://www.cnblogs.com/Mao1518202/p/11247228.html
Copyright © 2011-2022 走看看