生物信息学与算法R语言

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

2018-07-14  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读