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)) #连线是否画出
)
生成的结果图:
![](https://img.haomeiwen.com/i7775114/976e0ab798db2dba.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()
生成的结果图:
![](https://img.haomeiwen.com/i7775114/1d22c5414d41ba84.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") #箭头的线型
)
结果示例:
![](https://img.haomeiwen.com/i7775114/ba03d71261e04311.png)
依据下面一节讲的添加横坐标刻度,可以把图片修改为:
![](https://img.haomeiwen.com/i7775114/d632aaf72cb696ce.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()
结果示例:
![](https://img.haomeiwen.com/i7775114/0edfdce33f31c3f7.png)
![](https://img.haomeiwen.com/i7775114/2d3a70280743a181.png)
网友评论