美文网首页
2019-04-01

2019-04-01

作者: chaupak | 来源:发表于2019-04-20 11:14 被阅读0次

画相关性分析图的韦恩图部分:
使用VennDiagram包
最普通的功能是venn.diagram(),输入的是向量(最多五个集合),会自动生成韦恩图,有许多参数可以选择。也有较详细的功能,如两个集合比较、三个集合比较的功能。与venn.diagram不同的是,draw.pairwise.venn(两个集合比较)功能输入的参数是集合1的数量、集合2的数量以及共有元素的数量。在相关性分析中,我们想找出差异表达和差异甲基化基因的相关性,所以属于两个集合比较。除了画图,还需要让用户知道是哪些基因是overlap的,所以可以用专门针对两个集合比较的功能,顺便找出overlap的基因。准备输入的数据是之前算出来的有差异表达和差异甲基化的genelist,命名为de_genelist和dm_genelist。为了找出它们共有的基因,要运用到intersect()函数,这个函数是取两个集合之间的交集的,集合中可以是数值、字符串等。拓展:并集union()、找不同setdiff(x,y)取x中与y不同的元素、判断相同setequal()只有完全相同的时候才返回TRUE。
先试一下这个函数的功能:

venn.plot <- draw.pairwise.venn(100, 70, 30, c("First", "Second"));
grid.draw(venn.plot);
grid.newpage();

结果如图:


image.png

可以看到基本的信息都有了,但是可以把它做得美观一些

venn.plot <- draw.pairwise.venn(area1 =  100, 
                                    area2 =  70, 
                                    cross.area = 30, 
                                    category = c("First", "Second"), 
                                    fill = c("#F29B05","#A1D490"),
                                    ext.text = TRUE,
                                    ext.percent = c(0.1,0.1,0.1),
                                    ext.length = 0.6,
                                    label.col = rep("gray10",3),
                                    lwd = 0,
                                    cex = 2,
                                    lty = "blank",
                                    alpha = rep(0.3, 2),
                                    fontface = rep("bold",3),
                                    fontfamily = rep("sans",3), 
                                    cat.cex = 1.5,
                                    cat.fontface = rep("plain",2),
                                    cat.fontfamily = rep("sans",2),
                                    cat.pos = c(0, 0),
                                    print.mode = c("raw","percent"))
    grid.draw(venn.plot)
image.png

经过对参数的调整,这样就比较美观了。

进入正题:
所以取两个基因集之间的交集是:

overlap <- intersect(de_genelist, dm_genelist)

画韦恩图:

venn.plot <- draw.pairwise.venn(area1 =  length(de_genelist), 
                                    area2 =  length(dm_genelist), 
                                    cross.area = length(overlap), 
                                    category = c("Different Expression Genes", "Different Methylation Genes"),  #集合的名字
                                    fill = c("#F29B05","#A1D490"), #集合填充的颜色
                                    ext.text = TRUE, #是否在韦恩图的某一部分太小时把其中标签放在外面
                                    ext.percent = c(0.1,0.1,0.1), #在某一部分小于这个值时才把标签放在外面
                                    ext.length = 0.6, #连接外置标签和其指示部分的线长比例
                                    label.col = rep("gray10",3), #每部分标签的颜色
                                    lwd = 0, #集合外围的线的宽度
                                    cex = 2, #标签字体大小
                                    lty = "blank", #集合外围的线的样式,这里是无
                                    alpha = rep(0.3, 2), #透明度,默认是0.5
                                    fontface = rep("bold",3), #标签的字体样式,这里是加粗
                                    fontfamily = rep("sans",3),  #标签的字体,默认timesnewroman
                                    cat.cex = 1.5, #集合名字的大小
                                    cat.fontface = rep("plain",2), #集合名字的样式
                                    cat.fontfamily = rep("sans",2), #集合名字的字体
                                    cat.pos = c(0, 0), #集合名字的位置
                                    print.mode = c("raw","percent")) #标签以数字展示还是百分比展示,这里是上数字下百分比
    grid.draw(venn.plot) #画图

完成
散点图:


image.png

目标是做到上面的图

cor_plot <- function(CoxExpPlotData,gene1,gene2,cormethod="spearman"){
  library("ggplot2")
    # cor_df = data.frame(CoxExpPlotData, 
    #   gene1 = CoxExpPlotData[,gene1],
    #   gene2 = CoxExpPlotData[,gene2])
    pcutoff=0.05
    CoxTest = cor.test(CoxExpPlotData[, gene1], CoxExpPlotData[, gene2], method = cormethod)

  if(cormethod == "pearson"){
    plottitle <- paste0(cormethod,", R = ", signif(CoxTest$estimate[[1]], 3), "\nP value = ", signif(CoxTest$p.value, 4), sep = "")
  }else if(cormethod == "spearman"){
    plottitle <- paste0(cormethod,", rho = ", signif(CoxTest$estimate[[1]], 3), "\nP value = ", signif(CoxTest$p.value, 4), sep = "")
  }else if (cormethod == "kendall"){
    plottitle <- paste0(cormethod,", tau = ", signif(CoxTest$estimate[[1]], 3), "\nP value = ", signif(CoxTest$p.value, 4), sep = "")
  }
  
  print(paste("pvalue =", round(CoxTest$p.value, 4)))
  if(CoxTest$p.value <= pcutoff){
    CoxExpPoint = ggplot(data = CoxExpPlotData, aes_string(x= gene1, y = gene2))+theme_classic()+
      geom_point(size = 2, color = "gray36")+
      annotate("text",x=-Inf,y=Inf,label=plottitle,hjust=-.2,vjust=2)+
      stat_smooth(method = lm, se = FALSE, colour = "#191970")+
      ylab(paste(gene2, "Exp.", sep = " "))+xlab(paste(gene1, "Exp.",  sep = " "))+
      scale_y_continuous(expand = c(0, 0))+scale_x_continuous(expand = c(0, 0))+
      theme(plot.title = element_text(size = 15, angle = 0, face = "plain", colour = "black", hjust = 0.5, vjust = -0.5),
        axis.title.x = element_text(size = 15, angle = 0, face = "plain", colour = "black"),
        axis.title.y = element_text(size = 15, angle = 90, face = "plain", colour = "black"),
        axis.text.x = element_text(size = 15, angle = 0, face = "plain", colour = "black"),
        axis.text.y = element_text(size = 15, angle = 0, face = "plain", colour = "black"))}
  return(CoxExpPoint)
}

相关文章

网友评论

      本文标题:2019-04-01

      本文链接:https://www.haomeiwen.com/subject/alnmbqtx.html