Mfuzz::mfuzz.plot2 绘图过程梳理

3 篇文章 0 订阅
2 篇文章 0 订阅

要想用ggplot2重绘mfuzz.plot2 结果,就要理解图形中每个部分的含义。封面就是我ggplot2绘图结果,聚类折线+图例,如果你看不全封面记得给公众号加个星标⭐。

ggplot2重绘结果

其实使用ggplot2重现该图并非必需,只是我不会给图例和折线图拼图,基础绘图能力比较差,再就是为了增强自己对图形的理解,因此才自己ggplot2重绘了下。

mfuzz.plot2结果如下:

x轴每个时间点为有序的时间节点,y轴为标准化后的表达矩阵,即standardise()结果。

颜色该基因在该聚类中的隶属度,聚类图形轮廓由外到内颜色变化,表示隶属度由低到高。其中当mfuzz.plot2()centerTRUE时,轮廓中心为单条线为黑色。

隶属度为0-1的值,生成一个0-1之间,与颜色向量colo长度等长的向量colorseq。利用隶属度与等长向量的匹配关系,给每个基因在该Cluster分配颜色。也就是说,同一个基因在不同的Cluster中的隶属度不同,其颜色也可能不同。

通过给Cluster中基因表达量折线分配颜色的方式可知,这些颜色其实是一系列离散的配色,但是其细分的足够多,所以可以通过mfuzzColorBar生成连续配色的图例。ggplot2绘图时,生成连续配色图例并与折线图拼图,是我ggplot2重现该图时的最大难点。

基础参数

mfuzz_classstandardise()标准化表达矩阵结果.

mfuzz_clustermfuzz() fuzzy c-means 算法结果。通过调用R包e1071::cmeans 进行计算。

x11 设为FALSE。

eset = mfuzz_class
  cl = mfuzz_cluster
  mfrow = c(2, 5)
  colo = "fancy"
  min.mem = 0
  time.labels = colnames(exp_mean)
  #time.points
  ylim.set = c(0, 0)
  xlab = "Time"; ylab = "Expression changes"
  x11 = F
  ax.col = "black"; bg = "white"; col.axis = "black"; 
  col.lab = "black"; col.main = "black"; col.sub = "black"; 
  col = "black"; centre = FALSE; centre.col = "black"; centre.lwd = 2; 
  Xwidth = 5; Xheight = 5; single = FALSE

复现mfuzz.plot2绘图

原函数是循环绘图,为了拆解重现,我们只绘制Cluster1 部分。

思路已经说清,下面注释也挺详细的,自己看下吧。

  # 开始梳理
  ## 基础数据
  clusterindex <- cl[[3]] # 各基因所属cluter
  memship <- cl[[4]] # 各基因所属cluter的隶属度
  memship[memship < min.mem] <- -1 # 将小于最低隶属度的隶属度强制改为-1
  colorindex <- integer(dim(exprs(eset))[[1]]) # 行数长度的0向量
  ## 配色 
  if (colo == "fancy") {
    fancy.blue <- c(c(255:0), rep(0, length(c(255:0))), 
                    rep(0, length(c(255:150))))
    fancy.green <- c(c(0:255), c(255:0), rep(0, length(c(255:150))))
    fancy.red <- c(c(0:255), rep(255, length(c(255:0))), 
                   c(255:150))
    colo <- rgb(b = fancy.blue/255, g = fancy.green/255, 
                r = fancy.red/255)  # 取出颜色
  }
  length(colo) # 618
  # 根据隶属度范围0-1,生成与颜色向量等长的数值向量
  colorseq <- seq(0, 1, length = length(colo)) # 取出与颜色一致长度的值
  # 只取出Cluster1的部分绘制
  tmp <- exprs(eset)[clusterindex == j, , drop = FALSE] # 时序输入文件,标准后的表达矩阵
  tmpmem <- memship[clusterindex == j, j] # 取出cluster j中的membership
  
  # 坐标轴数值
  ymin <- min(tmp) # 定义最值
  ymax <- max(tmp)
  xlim.tmp <- c(1, dim(exprs(eset))[[2]]) # 列数  
  ylim <- c(ymin, ymax)
  
  
  # 基础绘图布局
  par(mfrow = mfrow, bg = bg, col.axis = col.axis,  # 绘制布局
      col.lab = col.lab, col.main = col.main, col.sub = col.sub, 
      col = col)
  # 绘制坐标轴标签和标题
  plot.default(x = NA, xlim = xlim.tmp, ylim = ylim,  # 绘制坐标轴标签和标题
               xlab = xlab, ylab = ylab, main = paste("Cluster", 
                                                      j), axes = FALSE )
  # 绘制坐标轴
  axis(1, 1:dim(exprs(eset))[[2]], time.labels, # 绘制坐标轴
       col = ax.col)
  axis(2, col = ax.col)
  
  # 根据membership数值给基因配色,即大致相同的隶属度,在各Cluter中绘图基本是相似的。
  for (jj in 1:(length(colorseq) - 1) ) {
    tmpcol <- (tmpmem >= colorseq[jj] & tmpmem <= 
                 colorseq[jj + 1]) # 通过membership给予颜色
    if (sum(tmpcol) > 0) {
      tmpind <- which(tmpcol)
      for (k in 1:length(tmpind)) {
        # if (missing(time.points)) {
        lines(tmp[tmpind[k], ], col = colo[jj]) # 划线数据为tmp,标准化后的表达量值。
        
        # }
        # else lines(time.points, tmp[tmpind[k], ], 
        #            col = colo[jj])
      }
    }
  }

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值