R语言绘图那些事(一)联合分析富集通路图

文摘   2024-12-21 17:45   新加坡  

 

缘由

生信之路,道阻且长,记录经验,但渡有缘人。

碎碎念

及时当勉励,岁月不饶人 ——陶渊明

原图 & 文章

Xu S, Luo C, Chen D, Tang L, Chen L, Liu Z. Whole transcriptome and proteome analyses identify potential targets and mechanisms underlying tumor treating fields against glioblastoma. Cell Death Dis. 2022 Aug 18;13(8):721. doi: 10.1038/s41419-022-05127-7. Erratum in: Cell Death Dis. 2022 Sep 19;13(9):797. doi: 10.1038/s41419-022-05228-3. PMID: 35982032; PMCID: PMC9388668.
功能:展示联合分析不同差异状态富集通路的变化。

炫图


代码

1. 数据准备部分

data <- read.delim("~/arrow.txt")
  • • 功能:读取一个外部文件 arrow.txt,其中包含用于绘制箭头和线段的数据。
  • • data 数据结构假设:应包含以下列:
    • • shape: 决定绘制形状,如箭头(arrow)或线段(line)。
    • • regu: 调节方向(如 "up" 表示上调,"down" 表示下调)。
    • • xyy_end: 确定线段或箭头的起点和终点坐标。
data2 <- data.frame(
    x = rep(1:4),           
    y = rep(paste0("pathway", 1:9), 4),
    pvalue=runif(36, min = 0, max = 1)
)
  • • 功能:创建模拟数据 data2,用于散点图绘制。
    • • x:离散分组变量(1-4)。
    • • y:不同 pathway 分组。
    • • pvalue:随机生成的 P 值,用于定义散点的颜色和大小。

2. 上部箭头和线段绘图(p 图表)

<- ggplot(data, aes(x=x, y=label))+
    geom_segment(
        data = subset(data, shape =="arrow"& regu=="up"),
        aes(= x, y = y, xend = x, yend = y_end),
        arrow = arrow(length= unit(0.2,"cm")),
        color ="red", size =2
    )+
    geom_segment(
        data = subset(data, shape =="arrow"& regu=="down"),
        aes(= x, y = y, xend = x, yend = y_end),
        arrow = arrow(length= unit(0.2,"cm")),
        color ="blue", size =2
    )+
    geom_segment(
        data = subset(data, shape =="line"),
        aes(x=x-0.3, xend = x +0.3, y=y, yend = y_end),
        color ="gray70", size =2
    )
  • • 功能:绘制线段和箭头,区分形状及方向。
    • • 箭头:根据 shape 和 regu 列,绘制红色(上调)和蓝色(下调)箭头。
    • • 水平线段:根据 shape=="line" 绘制灰色线段。

<- p +  scale_y_continuous(breaks =c(1.5, 3.5) , labels = c("protein","mRNA"), position = "right") + 
    labs(=NULL, y =NULL) + theme_minimal() +
    theme(panel.grid = element_blank(), 
        axis.text.x=element_blank(),text=element_text(size=18)) 
  • • 功能:优化坐标轴及图表样式。
    • • Y轴
      • • 设置断点为 1.5 和 3.5,并分别标记为 "protein" 和 "mRNA"
      • • 坐标轴显示在图表右侧(position = "right")。
    • • 全局样式
      • • 去掉网格线(panel.grid = element_blank())。
      • • 隐藏 X 轴刻度文本(axis.text.x = element_blank())。

3. 下部散点图绘制(p_main 图表)

p_main <- ggplot(data2, aes(= x, y = y)) +
    geom_point(aes(color = pvalue, size = pvalue)) +
    labs(= NULL, y = NULL) +
    theme_minimal() +
    scale_color_gradient(low = "#ee0000", high = "#0077d7")
  • • 功能:绘制散点图。
    • • 颜色渐变:基于 pvalue,从红色(#ee0000)到蓝色(#0077d7)。
    • • 点大小:根据 pvalue 调整点的大小。

p_main <-  p_main + scale_y_discrete(position ="right")+
    scale_x_continuous(position ="top")+
    theme(
        panel.grid = element_blank(),
        panel.border = element_blank(),
        text = element_text(size =18),
        axis.line.x = element_line(color ="black", size =0.5, linetype ="solid"),
        axis.line.y = element_blank(),
        axis.text.x= element_blank()
    )+
    guides(
        color = guide_legend("pvalue"),
        shape = guide_legend("pvalue")
    )
  • • 功能:调整散点图样式。
    • • 坐标轴位置:X 轴移到顶部,Y 轴移到右侧。
    • • 图表装饰:去掉边框和网格线,仅保留顶部的 X 轴线。
    • • 图例:为 pvalue 添加图例。

4. 图表组合

%>% insert_bottom(p_main, height = 5)
  • • 功能:使用 aplot 包将 p(箭头和线段图)与 p_main(散点图)组合在一起,将散点图插入到箭头图的底部。
  • • height = 5:指定底部散点图所占高度。

ALL


library(aplot)

data <- read.delim("~/arrow.txt")


set.seed(123)# 设置随机种子保证结果可复现
data2 <- data.frame(
    x =rep(1:4),            # x 轴值
    y =rep(paste0("pathway",1:9),4),
    pvalue=runif(36,min=0,max=1)
    
)


<-  ggplot(data, aes(x=x, y=label))+
    geom_segment(
        data = subset(data, shape =="arrow"& regu=="up"),# 只绘制箭头的数据
        aes(= x, y = y, xend = x, yend = y_end),
        arrow = arrow(length= unit(0.2,"cm")),# 添加箭头
        color ="red", size =2
    )+
    geom_segment(
        data = subset(data, shape =="arrow"& regu=="down"),# 只绘制箭头的数据
        aes(= x, y = y, xend = x, yend = y_end),
        arrow = arrow(length= unit(0.2,"cm")),# 添加箭头
        color ="blue", size =2
    )+
    geom_segment(
        data = subset(data, shape =="line"),
        aes(x=x-0.3, xend = x +0.3, y=y, yend = y_end),# 只绘制水平线段的数据
        
        color ="gray70", size =2
    )

<- p +  scale_y_continuous(breaks =c(1.5,3.5), labels =c("protein","mRNA"), position ="right")+
    labs(=NULL, y =NULL)+ theme_minimal()+
    theme(panel.grid = element_blank(),
        axis.text.x=element_blank(),text=element_text(size=18))


# 绘制散点图
p_main <- ggplot(data2, aes(= x, y = y))+
    geom_point(aes(color = pvalue, size = pvalue))+# 绘制散点图
    labs(=NULL, y =NULL)+
    theme_minimal()+
    scale_color_gradient(low ="#ee0000", high ="#0077d7")

p_main <-  p_main + scale_y_discrete(position ="right")+
    scale_x_continuous(position ="top")+
    theme(
        panel.grid = element_blank(),# 去除网格线
        panel.border = element_blank(),
        text = element_text(size =18),# 设置文本大小
        axis.line.x = element_line(color ="black", size =0.5, linetype ="solid"),
        axis.line.y = element_blank(),# 设置顶部 X 轴线条
        axis.text.x= element_blank(),
    )+
    guides(
        color = guide_legend("pvalue"),
        shape = guide_legend("pvalue")
    )



%>% insert_bottom(p_main,height =5)



RPython
人生苦短,R和Python。
 最新文章