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.position = c("end", "start"),
tail = c("normal", "point"),
border = "black",
col = "white",
lty = par("lty"),
...)

## Arguments

x1 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.

## Details

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.

## Examples

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,
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,
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)#> Warning: 'start.degree' can only be modified before circos.initialize, or
#> maybe you forgot to call circos.clear in your last plot.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()