# NOT RUN {
#### simulate data ####
set.seed(123)
df = data.frame(cate = sample(letters[1:8], 400, replace = TRUE),
x = runif(400),
y = runif(400),
stringsAsFactors = FALSE)
df = df[order(df[[1]], df[[2]]), ]
rownames(df) = NULL
df$interval_x = as.character(cut(df$x, c(0, 0.2, 0.4, 0.6, 0.8, 1.0)))
df$name = paste(df$cate, df$interval_x, sep = ":")
df$start = as.numeric(gsub("^\\((\\d(\\.\\d)?).*(\\d(\\.\\d)?)]", "\\1", df$interval_x))
df$end = as.numeric(gsub("^\\((\\d(\\.\\d)?),(\\d(\\.\\d)?)]$", "\\3", df$interval_x))
nm = sample(unique(df$name), 20)
df2 = df[df$name %in% nm, ]
correspondance = unique(df2[, c("cate", "start", "end", "name", "start", "end")])
zoom_sector = unique(df2[, c("name", "start", "end", "cate")])
zoom_data = df2[, c("name", "x", "y")]
data = df[, 1:3]
sector = data.frame(cate = letters[1:8], start = 0, end = 1, stringsAsFactors = FALSE)
sector_col = structure(rand_color(8, transparency = 0.5), names = letters[1:8])
#### define two circular plots ####
f1 = function() {
circos.par(gap.degree = 10)
circos.initialize(sector[, 1], xlim = sector[, 2:3])
circos.track(data[[1]], x = data[[2]], y = data[[3]], ylim = c(0, 1),
panel.fun = function(x, y) {
l = correspondance[[1]] == CELL_META$sector.index
if(sum(l)) {
for(i in which(l)) {
circos.rect(correspondance[i, 2], CELL_META$cell.ylim[1],
correspondance[i, 3], CELL_META$cell.ylim[2],
col = sector_col[CELL_META$sector.index],
border = sector_col[CELL_META$sector.index])
}
}
circos.points(x, y, pch = 16, cex = 0.5)
circos.text(CELL_META$xcenter, CELL_META$ylim[2] + uy(2, "mm"),
CELL_META$sector.index, niceFacing = TRUE, adj = c(0.5, 0))
})
}
f2 = function() {
circos.par(gap.degree = 2, cell.padding = c(0, 0, 0, 0))
circos.initialize(zoom_sector[[1]], xlim = as.matrix(zoom_sector[, 2:3]))
circos.track(zoom_data[[1]], x = zoom_data[[2]], y = zoom_data[[3]],
panel.fun = function(x, y) {
circos.points(x, y, pch = 16, cex = 0.5)
}, bg.col = sector_col[zoom_sector$cate],
track.margin = c(0, 0))
}
circos.nested(f1, f2, correspondance, connection_col = sector_col[correspondance[[1]]])
# }
# NOT RUN {
# }
Run the code above in your browser using DataLab