美文网首页生物信息学与算法R语言
circlize R包学习【持续更新中...】

circlize R包学习【持续更新中...】

作者: 风口的猪都会飞 | 来源:发表于2018-07-14 22:48 被阅读47次
    library(reshape)
    library(circlize)
    

    颜色通明度设置

    add_transparency("red",0.5)
    

    列表转化成矩阵

    lt = data.frame(letters[1:5], letters[6:10])
    adjacencyList2Matrix(lt)
    lt = data.frame(letters[1:5], letters[6:10], 1:5)
    adjacencyList2Matrix(lt,square = F)
    

    查询当前cell的信息

    CELL_META$sector.index
    

    chordDiagram做圈图

    set.seed(999)
    mat = matrix(sample(18, 18), 3, 6)
    rownames(mat) = paste0("S", 1:3)
    colnames(mat) = paste0("E", 1:6)
    df=melt(mat)
    df$X1=as.character(df$X1)
    df$X2=as.character(df$X2)
    
    #作图
    chordDiagram(mat)
    chordDiagram(df)
    circos.clear()
    
    #图形的精修和参数介绍
    chordDiagram(df, 
      reduce = -1, #如果单个扇叶/整个环 < reduce,则这个扇叶不展示
      grid.col=sample(colors(),length(union(df$X1,df$X2)),replace = F),  #扇叶的颜色,顺序和union(df[[1]],df[[2]])一样
      col=colorRamp2(breaks=c(1,18),colors=c("blue","red")),  #连线的颜色,也可以设置展示df中数值的大小
      order = union(df$X2,df$X1),  #扇叶展示的顺序
      directional = 1, #连线的方向,1=第一列到第二列,2=双方向,-1=第二列到第一列,0=无方向
      direction.type = "arrows", #可以为“diffHeight”,也可以为“arrows”
      diffHeight = rep(convert_height(1,"mm"),length(union(df$X1,df$X2))), #正值代表出处比末尾凸出,负值代表出处比末尾凹进去
     self.link = 1, #自己和自己相连的线,1=形似山 宽度代变数值大小,2=出和入的宽度相同并代表数值的大小
      preAllocateTracks = 1, #预留出多少空的轨道
      link.border = rep('grey',nrow(df)), #连线边界的颜色
      link.lwd = rep(1,nrow(df)), #连线边界的宽度
      link.lty = rep(3,nrow(df)), #设置连线边界的线型
      link.sort = T, # 对连线依据大小排序
      link.decreasing = T, #连线降序排序
      link.arr.width = rep(0.1,nrow(df)), #连线方向用箭头表示时,箭头的宽度
      link.arr.type = "triangle", #箭头类型
      link.arr.col = rep('grey',nrow(df)), #箭头的颜色
      link.arr.lwd = rep(1,nrow(df)), #箭头的尾线宽度
      link.arr.lty = rep(3,nrow(df)), #箭头尾线的线型
      link.visible = c(rep(T,9),rep(F,9)) #连线是否画出
      )
    

    生成的结果图:


    output.jpeg

    circos.arrow 画平行于圆圈的箭头

    circos.initialize(letters[1:4],xlim = cbind(rep(1,4),2:5))
    circos.track(ylim = c(-1,1))
    circos.arrow(
      x1 = 2, #箭头横坐标起始位置
      x2 = 3, #箭头横坐标终止位置
      y = 0, #箭头中心纵坐标位置
      width = 1 , #箭头身子的宽度
      sector.index = "c", #sector的编号
      track.index = 1, #track的编号
      arrow.head.length = 0.3, #箭头的长度,注意此值应小于x2-x1(即箭头的长度)
      arrow.head.width = 1.5, #箭头的宽度
      arrow.position = "end", #箭头的位置["end","start"]
      tail = "point", #箭头尾巴的样式,直角=”normal“,点=”point“
      border = "black", #箭头边缘的颜色
      col = "white", #箭头的填充色
      lty = par("lty")  #箭头的线型
      )
    circos.clear()
    

    生成的结果图:


    output.png

    做多个环,并且做点图和箭头

    circos.initialize(letters[1:4],xlim = c(1:2))
    track_index_one = 1 #自定义调整需要做的环数索引,从1开始
    sector_index_one = "a" #自定义需要做的扇叶索引,["a","b","c","d"]
    dot_plot_color = "red" #自定义作图的颜色
    circos.trackPlotRegion(factors = letters[1:4], #创建扇叶的名称
                           ylim = c(-1,1), #y轴的范围,x轴范围和circos.initialize设置的范围一致
                           force.ylim = TRUE, #强制所有的扇形有相同的ylim
                           track.index = track_index_one, #填一个环的索引,画出或者更新环,注意这个值不大于环索引最大值+1
                           bg.col = NA, #作图区域背景颜色,可以对每个扇形自定义设置
                           bg.border = c(rep(dot_plot_color,3),NA), #作图区域边界颜色,可以对每个扇形自定义设置
                           bg.lty = par("lty"), #作图区域线形,可以对每个扇形自定义设置
                           bg.lwd = par("lwd") #作图区域的线宽,可以对每个扇形自定义设置
                           )#制作并选择作图的环
    
    data_to_plot=cbind(sample(seq(1,2,length.out = 9),size = 10,replace = T),sample(seq(-1,1,length.out = 5),size = 10,replace = T) 
    )
    for (aa in 1:nrow(data_to_plot)) {
      data_to_plot_one=data_to_plot[aa,]
      circos.points(data_to_plot_one[1],data_to_plot_one[2],col = dot_plot_color,sector.index = sector_index_one, track.index = track_index_one)
    }
    
    circos.arrow(
      x1 = 1, #箭头横坐标起始位置
      x2 = 2, #箭头横坐标终止位置
      y = 0, #箭头中心纵坐标位置
      width = 1 , #箭头身子的宽度
      sector.index = "d", #sector的编号
      track.index = track_index_one, #track的编号
      arrow.head.length = 0.3, #箭头的长度,注意此值应小于x2-x1(即箭头的长度)
      arrow.head.width = 1.5, #箭头的宽度
      arrow.position = "end", #箭头的位置["end","start"]
      tail = "normal", #箭头尾巴的样式,直角=”normal“,点=”point“
      border = dot_plot_color, #箭头边缘的颜色
      col = "white", #箭头的填充色
      lty = par("lty")  #箭头的线型
    )
    
    结果示例: output.png
    依据下面一节讲的添加横坐标刻度,可以把图片修改为: output.png

    circos.axis 画横坐标

    factors = letters[1:8]
    circos.par(points.overflow.warning = FALSE)
    circos.initialize(factors = factors, 
                      xlim = c(0,10)
    )
    circos.trackPlotRegion(
      factors=factors,
      ylim=c(0,10),
      track.height = 0.1,
      bg.border = NA,
      panel.fun = function(x,y){
        circos.text(5,10,get.cell.meta.data("sector.index"))
      }
    )
    circos.trackPlotRegion(factors = factors,ylim=c(0,10))
    circos.axis(sector.index = "a")
    circos.axis(sector.index = "b", #画坐标刻度的扇面
                direction = "outside", #刻度画在扇叶里面还是扇叶外面["outside","inside"]
                h = "top", #["top","bottom",数字] 刻度画在扇叶的位置
                labels.facing = "reverse.clockwise", #字体依据扇面旋转["reverse.clockwise","clockwise"]
                major.at = c(1,3,5,7,9), #刻度的值,默认分成十个刻度
                labels = letters[1:10], #定义每个刻度的名字
                minor.ticks = 0, #在主刻度线之间小刻度线的数目
                major.tick = T, #[FALSE,TRUE]是否画主刻度线
                major.tick.percentage = 0.1, #主刻度线相对于扇面高度的百分比
                labels.away.percentage = major.tick.percentage/2 #刻度线上的文字标识和刻度线的距离(也是相对于扇面高度)
    )
    circos.clear()
    
    结果示例: output.png ps:纵坐标刻度设置和横坐标设置差不多,参数为circos.yaxis,可以自学,试着做出图片: output.png

    相关文章

      网友评论

        本文标题:circlize R包学习【持续更新中...】

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