Draw arrow which is paralle to the circle
circos.arrow(
x1,
x2,
y = get.cell.meta.data("ycenter"),
width = get.cell.meta.data("yrange")/2,
sector.index = get.current.sector.index(),
track.index = get.current.track.index(),
arrow.head.length = mm_x(5),
arrow.head.width = width*2,
arrow.position = c("end", "start"),
tail = c("normal", "point"),
border = "black",
col = "#FFCCCC",
lty = par("lty"),
...)
Start position of the arrow on the x-axis.
End position of the arrow on the x-axis. Note x2
should be larger than x1
. The direction of arrows can be controlled by arrow.position
argument.
Position of the arrow on the y-axis. Note this is the center of the arrow on y-axis.
Width of the arrow body.
Index of the sector.
Index of the track.
Length of the arrow head. Note the value should be smaller than the length of the arrow itself (which is x2 - x1
).
Width of the arrow head.
Where is the arrow head on the arrow. If you want to the arrow in the reversed direction, set this value to "start"
.
The shape of the arrow tail (the opposite side of arrow head).
Border color of the arrow.
Filled color of the arrow.
Line style of the arrow.
Pass to polygon
.
Zuguang Gu <z.gu@dkfz.de>
Note all position values are measured in the data coordinate (the coordinate in each cell). For the values of
width
, arrow.head.Length
, arrow.head.width
, they can be set with mm_y
/cm_y
/inches_y
in absolute units.
If you see points overflow warnings, you can set circos.par(points.overflow.warning = FALSE)
to turn it off.
op = par(no.readonly = TRUE)
par(mfrow = c(1, 2))
circos.initialize(letters[1:4], xlim = c(0, 1))
col = rand_color(4)
tail = c("point", "normal", "point", "normal")
circos.track(ylim = c(0, 1), panel.fun = function(x, y) {
circos.arrow(x1 = 0, x2 = 1, y = 0.5, width = 0.4,
arrow.head.width = 0.6, arrow.head.length = cm_x(1),
col = col[CELL_META$sector.numeric.index],
tail = tail[CELL_META$sector.numeric.index])
}, bg.border = NA, track.height = 0.4)
circos.clear()
circos.initialize(letters[1:4], xlim = c(0, 1))
tail = c("point", "normal", "point", "normal")
circos.track(ylim = c(0, 1), panel.fun = function(x, y) {
circos.arrow(x1 = 0, x2 = 1, y = 0.5, width = 0.4,
arrow.head.width = 0.6, arrow.head.length = cm_x(1),
col = col[CELL_META$sector.numeric.index],
tail = tail[CELL_META$sector.numeric.index],
arrow.position = "start")
}, bg.border = NA, track.height = 0.4)
par(op)
########## cell cycle ###########
cell_cycle = data.frame(phase = factor(c("G1", "S", "G2", "M"),
levels = c("G1", "S", "G2", "M")),
hour = c(11, 8, 4, 1))
color = c("#66C2A5", "#FC8D62", "#8DA0CB", "#E78AC3")
circos.par(start.degree = 90)
circos.initialize(cell_cycle$phase, xlim = cbind(rep(0, 4), cell_cycle$hour))
circos.track(ylim = c(0, 1), panel.fun = function(x, y) {
circos.arrow(CELL_META$xlim[1], CELL_META$xlim[2],
arrow.head.width = CELL_META$yrange*0.8, arrow.head.length = cm_x(1),
col = color[CELL_META$sector.numeric.index])
circos.text(CELL_META$xcenter, CELL_META$ycenter, CELL_META$sector.index,
facing = "downward")
}, bg.border = NA, track.height = 0.3)
circos.clear()
Run the code above in your browser using DataLab