{"id":2493,"date":"2018-11-27T19:50:54","date_gmt":"2018-11-27T19:50:54","guid":{"rendered":"http:\/\/pcool.dyndns.org:8080\/statsbook\/?page_id=2493"},"modified":"2025-06-30T09:34:36","modified_gmt":"2025-06-30T08:34:36","slug":"circos-plots-circlize","status":"publish","type":"page","link":"https:\/\/pcool.dyndns.org\/index.php\/circos-plots-circlize\/","title":{"rendered":"Circos Plots &#8211; circlize"},"content":{"rendered":"\n<p>circlize<sup class='sup-ref-note' id='note-zotero-ref-p2493-r1-o1'><a class='sup-ref-note' href='#zotero-ref-p2493-r1'>1<\/a><\/sup>\u00a0can be used to make chromosome ideograms.\u00a0The example below uses the hg19 assembly (GRCh37) as reference. However, the newer (hg38 \/ GRCh38) can also be downloaded, manipulated and used instead (see below). It is important to use the appropriate reference assembly when working with genomic data.<\/p>\n\n\n\n<p>For the examples below to work, the dplyr<sup class='sup-ref-note' id='note-zotero-ref-p2493-r2-o1'><a class='sup-ref-note' href='#zotero-ref-p2493-r2'>2<\/a><\/sup> and stringr<sup class='sup-ref-note' id='note-zotero-ref-p2493-r3-o1'><a class='sup-ref-note' href='#zotero-ref-p2493-r3'>3<\/a><\/sup> packages should also be installed and loaded for a default plot with the hg19 assembly:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#f90101\" class=\"has-inline-color\">BiocManager::install('circlize')<\/mark><\/em>\n\n<span style=\"color: #ff0000;\">library(circlize)<\/span>\n<span style=\"color: #ff0000;\">library(dplyr)<\/span>\n<span style=\"color: #ff0000;\">library(stringr)<\/span>\n\n<span style=\"color: #ff0000;\"># https:\/\/jokergoo.github.io\/circlize_book\/book\/initialize-genomic-plot.html<\/span>\n<span style=\"color: #ff0000;\"># https:\/\/cran.r-project.org\/web\/packages\/circlize\/circlize.pdf<\/span>\n\n<span style=\"color: #ff0000;\"># create an ideogram<\/span>\n<span style=\"color: #ff0000;\">circos.initializeWithIdeogram()<\/span>\n<span style=\"color: #ff0000;\"># the plot names the chromosome numeric, but the internal names have 'chr' in front of them<\/span>\n<span style=\"color: #ff0000;\"># for index use chr1 etc<\/span>\n\n<span style=\"color: #ff0000;\"># add text:<\/span>\n<span style=\"color: #ff0000;\">text(0, 0, \"Chromosome Ideogram\", cex = 1)<\/span>\n<span style=\"color: #ff0000;\"># info:<\/span>\n<span style=\"color: #ff0000;\">circos.info()<\/span>\n<span style=\"color: #0000ff;\">All your sectors:<\/span>\n<span style=\"color: #0000ff;\"> &#091;1] \"chr1\" \"chr2\" \"chr3\" \"chr4\" \"chr5\" \"chr6\" \"chr7\" \"chr8\" \"chr9\" \"chr10\" \"chr11\"<\/span>\n<span style=\"color: #0000ff;\">&#091;12] \"chr12\" \"chr13\" \"chr14\" \"chr15\" \"chr16\" \"chr17\" \"chr18\" \"chr19\" \"chr20\" \"chr21\" \"chr22\"<\/span>\n<span style=\"color: #0000ff;\">&#091;23] \"chrX\" \"chrY\"<\/span>\n\n<span style=\"color: #0000ff;\">All your tracks:<\/span>\n<span style=\"color: #0000ff;\">&#091;1] 1 2<\/span>\n\n<span style=\"color: #0000ff;\">Your current sector.index is chrY<\/span>\n<span style=\"color: #0000ff;\">Your current track.index is 2<\/span>\n\n<span style=\"color: #ff0000;\"># clear the plotting<\/span>\n<span style=\"color: #ff0000;\">circos.clear()<\/span><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"959\" src=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_1-1024x959.png\" alt=\"\" class=\"wp-image-2945\" srcset=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_1-1024x959.png 1024w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_1-300x281.png 300w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_1-768x719.png 768w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_1.png 1292w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><span style=\"color: #000000;\">The default ideogram is hg19, but this can be changed with the species argument. However,\u00a0<\/span><span style=\"color: #000000;\">circos.initializeWithIdeogram(species = &#8220;hg38&#8221;) doesn&#8217;t work as there are too many unmapped regions. T<\/span><span style=\"color: #000000;\">he hg38 cytoband can be downloaded from: <\/span><br><span style=\"color: #000000;\"><a href=\"http:\/\/hgdownload.cse.ucsc.edu\/goldenpath\/hg38\/database\/\" target=\"_blank\" rel=\"noopener\">http:\/\/hgdownload.cse.ucsc.edu\/goldenpath\/hg38\/database\/<\/a><\/span><br>(file = &#8216;cytoband.txt.gz&#8217;). <span style=\"color: #000000;\">Put it on the desktop, extract the file and read it in:<\/span><\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><span style=\"color: #ff0000;\"><em>cytoband.df.1 &lt;- read.table(\"~\/Desktop\/cytoBand.txt\", colClasses = c(\"character\", \"numeric\", \"numeric\", \"character\", \"character\"), sep = \"\\t\")<\/em><\/span>\n<em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#f2070f\" class=\"has-inline-color\">head(cytoband.df.1)<\/mark><mark style=\"background-color:rgba(0, 0, 0, 0);color:#070af1\" class=\"has-inline-color\">\n    V1       V2       V3     V4     V5\n1 chr1        0  2300000 p36.33   gneg\n2 chr1  2300000  5300000 p36.32 gpos25\n3 chr1  5300000  7100000 p36.31   gneg\n4 chr1  7100000  9100000 p36.23 gpos25\n5 chr1  9100000 12500000 p36.22   gneg\n6 chr1 12500000 15900000 p36.21 gpos50<\/mark><\/em>\n\n<span style=\"color: #ff0000;\"><em># Remove the unmapped areas: remove chromosome names <\/em><\/span>\n<span style=\"color: #ff0000;\"><em># that end in _alt, _random, _fix or start with chrUn:<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>cytoband.df.2 &lt;- <span style=\"color: #ff0000;\"><em>cytoband.df.1<\/em><\/span> %>% dplyr::filter(!str_detect(V1, \"chrUn\")) %>%<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>dplyr::filter(!str_detect(V1, \"_alt\")) %>%<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>dplyr::filter(!str_detect(V1, \"_random\"))<\/em><\/span> <em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#f00202\" class=\"has-inline-color\">%>%\ndplyr::filter(!str_detect(V1, \"_fix\"))<\/mark><\/em>\n<mark style=\"background-color:rgba(0, 0, 0, 0);color:#ee0808\" class=\"has-inline-color\"><em>head(cytoband.df.2)<\/em><\/mark>\n<mark style=\"background-color:rgba(0, 0, 0, 0);color:#0904f5\" class=\"has-inline-color\"><em>    V1       V2       V3     V4     V5\n1 chr1        0  2300000 p36.33   gneg\n2 chr1  2300000  5300000 p36.32 gpos25\n3 chr1  5300000  7100000 p36.31   gneg\n4 chr1  7100000  9100000 p36.23 gpos25\n5 chr1  9100000 12500000 p36.22   gneg\n6 chr1 12500000 15900000 p36.21 gpos50<\/em><\/mark>\n<span style=\"color: #ff0000;\"><em>circos.initializeWithIdeogram(cytoband.df.2)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>circos.clear()<\/em><\/span><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"959\" src=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_2-1024x959.png\" alt=\"\" class=\"wp-image-2950\" srcset=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_2-1024x959.png 1024w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_2-300x281.png 300w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_2-768x719.png 768w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_2.png 1292w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>By default, all chromosomes are displayed, but this can be changed with the index:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><span style=\"color: #ff0000;\"><em>circos.initializeWithIdeogram(cytoband.df.2, chromosome.index = paste0(\"chr\", c(3,5,2,8)))<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>text(0, 0, \"subset of chromosomes\", cex = 1)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>circos.clear()<\/em><\/span><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"959\" src=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_3-1024x959.png\" alt=\"\" class=\"wp-image-2955\" srcset=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_3-1024x959.png 1024w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_3-300x281.png 300w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_3-768x719.png 768w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_3.png 1292w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Where&nbsp;to start can be set with circos.par:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><span style=\"color: #ff0000;\"><em>circos.par(\"start.degree\" = 90)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>circos.initializeWithIdeogram(cytoband.df.2)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>circos.clear()<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>text(0, 0, \"'start.degree' = 90\", cex = 1)<\/em><\/span><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"959\" src=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_4-1024x959.png\" alt=\"\" class=\"wp-image-2960\" srcset=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_4-1024x959.png 1024w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_4-300x281.png 300w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_4-768x719.png 768w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_4.png 1292w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>To plot different genes:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><em><span style=\"color: #ff0000;\">df = data.frame(<\/span><\/em><em><span style=\"color: #ff0000;\">name = c(\"TP53\", \"TP63\", \"TP73\"), <\/span><\/em><em><span style=\"color: #ff0000;\">start = c(7565097, 189349205, 3569084), <\/span><\/em><em><span style=\"color: #ff0000;\">end = c(7590856, 189615068, 3652765))<\/span><\/em>\n<em><span style=\"color: #ff0000;\">circos.genomicInitialize(df)<\/span><\/em>\n<em><span style=\"color: #ff0000;\">circos.clear()<\/span><\/em><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"959\" src=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_5-1024x959.png\" alt=\"\" class=\"wp-image-2965\" srcset=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_5-1024x959.png 1024w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_5-300x281.png 300w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_5-768x719.png 768w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_5.png 1292w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Custom plot:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><em><span style=\"color: #ff0000;\">tp_family = readRDS(system.file(package = \"circlize\", \"extdata\", \"tp_family_df.rds\"))<\/span><\/em>\n<em><span style=\"color: #ff0000;\">head(tp_family)<\/span><\/em>\n<em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#0733f9\" class=\"has-inline-color\">  gene   start     end        transcript exon\n1 TP53 7565097 7565332 ENST00000413465.2    7\n2 TP53 7577499 7577608 ENST00000413465.2    6\n3 TP53 7578177 7578289 ENST00000413465.2    5\n4 TP53 7578371 7578554 ENST00000413465.2    4\n5 TP53 7579312 7579590 ENST00000413465.2    3\n6 TP53 7579700 7579721 ENST00000413465.2    2<\/mark><\/em>\n\n<em><span style=\"color: #ff0000;\"># build track<\/span><\/em>\n<em><span style=\"color: #ff0000;\">circos.genomicInitialize(tp_family)<\/span><\/em>\n<em><span style=\"color: #ff0000;\"># give colours to different genes:<\/span><\/em>\n<em><span style=\"color: #ff0000;\">circos.track(ylim = c(0, 1), bg.col = c(\"#FF000040\", \"#00FF0040\", \"#0000FF40\"), bg.border = NA, track.height = 0.05)<\/span><\/em>\n<em><span style=\"color: #ff0000;\"># add transcripts<\/span><\/em>\n<em><span style=\"color: #ff0000;\">n = max(tapply(tp_family$transcript, tp_family$gene, function(x) length(unique(x))))<\/span><\/em>\n\n<em><span style=\"color: #ff0000;\">circos.genomicTrack(tp_family, ylim = c(0.5, n + 0.5), panel.fun = function(region, value, ...) {<\/span><\/em>\n  <em><span style=\"color: #ff0000;\">all_tx = unique(value$transcript)<\/span><\/em>\n    <em><span style=\"color: #ff0000;\">for(i in seq_along(all_tx)) {<\/span><\/em>\n      <em><span style=\"color: #ff0000;\">l = value$transcript == all_tx&#091;i]<\/span><\/em>\n<em><span style=\"color: #ff0000;\">      # for each transcript<\/span><\/em>\n<em><span style=\"color: #ff0000;\">      current_tx_start = min(region&#091;l, 1])<\/span><\/em>\n<em><span style=\"color: #ff0000;\">      current_tx_end = max(region&#091;l, 2])<\/span><\/em>\n<em><span style=\"color: #ff0000;\">      circos.lines(c(current_tx_start, current_tx_end), c(n - i + 1, n - i + 1), col = \"#CCCCCC\")<\/span><\/em>\n<em><span style=\"color: #ff0000;\">      circos.genomicRect(region&#091;l, , drop = FALSE], ytop = n - i + 1 + 0.4, ybottom = n - i + 1 - 0.4, col = \"orange\", border = NA)<\/span><\/em>\n    <em><span style=\"color: #ff0000;\">}<\/span><\/em>\n  <em><span style=\"color: #ff0000;\">}, bg.border = NA, track.height = 0.4)<\/span><\/em>\n<em><span style=\"color: #ff0000;\">circos.clear()<\/span><\/em><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"959\" src=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_6-1024x959.png\" alt=\"\" class=\"wp-image-2970\" srcset=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_6-1024x959.png 1024w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_6-300x281.png 300w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_6-768x719.png 768w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_6.png 1292w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Custom zoomed plot:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><span style=\"color: #ff0000;\"><em># zooming into chromosomes<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>extend_chromosomes = function(bed, chromosome, prefix = \"zoom_\") {<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>zoom_bed = bed&#091;bed&#091;&#091;1]] %in% chromosome, , drop = FALSE]<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>zoom_bed&#091;&#091;1]] = paste0(prefix, zoom_bed&#091;&#091;1]])<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>rbind(bed, zoom_bed)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>}<\/em><\/span>\n<span style=\"color: #ff0000;\"><em># use the downloaded hg38 assembly from above:<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>head(cytoband.df.2)<\/em><\/span>\n<em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#070af4\" class=\"has-inline-color\">    V1       V2       V3     V4     V5\n1 chr1        0  2300000 p36.33   gneg\n2 chr1  2300000  5300000 p36.32 gpos25\n3 chr1  5300000  7100000 p36.31   gneg\n4 chr1  7100000  9100000 p36.23 gpos25\n5 chr1  9100000 12500000 p36.22   gneg\n6 chr1 12500000 15900000 p36.21 gpos50<\/mark><\/em>\n<span style=\"color: #ff0000;\"><em># chromosome names<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>chromosome &lt;- unique(cytoband.df.2$V1)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>chromosome<\/em><\/span>\n<span style=\"color: #0000ff;\"><em> &#091;1] \"chr1\" \"chr10\" \"chr11\" \"chr12\" \"chr13\" \"chr14\" \"chr15\" \"chr16\" \"chr17\" \"chr18\" \"chr19\"<\/em><\/span>\n<span style=\"color: #0000ff;\"><em>&#091;12] \"chr2\" \"chr20\" \"chr21\" \"chr22\" \"chr3\" \"chr4\" \"chr5\" \"chr6\" \"chr7\" \"chr8\" \"chr9\" <\/em><\/span>\n<span style=\"color: #ff0000;\"><em><span style=\"color: #0000ff;\">&#091;23] \"chrM\" \"chrX\" \"chrY\"<\/span> <\/em><\/span>\n<span style=\"color: #ff0000;\"><em># chromosome length<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>chromosome.length &lt;- cytoband.df.2 %>% dplyr::group_by(V1) %>% summarise(max = max(V3))<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>chromosome.length<\/em><\/span>\n<em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#1205f5\" class=\"has-inline-color\"># A tibble: 25 \u00d7 2\n   V1          max\n   &lt;chr>     &lt;dbl>\n 1 chr1  248956422\n 2 chr10 133797422\n 3 chr11 135086622\n 4 chr12 133275309\n 5 chr13 114364328\n 6 chr14 107043718\n 7 chr15 101991189\n 8 chr16  90338345\n 9 chr17  83257441\n10 chr18  80373285\n# \u2139 15 more rows<\/mark><\/em>\n\n<span style=\"color: #ff0000;\"><em># length of 1st and second chromosome<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>chromosome.1.length &lt;- as.numeric(chromosome.length&#091;1,2])<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>chromosome.2.length &lt;- as.numeric(chromosome.length&#091;12,2])<\/em><\/span>\n\n<span style=\"color: #ff0000;\"><em># add all chromosome lengths to a vector and add again chr1 and chr2; # used for zooming<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>x_range &lt;- c(chromosome.length$max, chromosome.1.length, chromosome.2.length)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>names(x_range) &lt;- c(chromosome.length$V1, \"chr1\", \"chr2\")<\/em><\/span>\n<span style=\"color: #ff0000;\"><em># calculate sector width<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>normal_chr_index = 1:25<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>zoomed_chr_index = 26:27<\/em><\/span>\n<span style=\"color: #ff0000;\"><em># normalize in normal chromsomes and zoomed chromosomes separately<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>sector.width = c(x_range&#091;normal_chr_index]\/sum(x_range&#091;normal_chr_index]),x_range&#091;zoomed_chr_index]\/sum(x_range&#091;zoomed_chr_index])) <\/em><\/span>\n\n<span style=\"color: #ff0000;\"><em>### create the plot<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>circos.par(start.degree = 90)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>circos.initializeWithIdeogram(extend_chromosomes(cytoband.df.2,c(\"chr1\", \"chr2\")), sector.width = sector.width)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em># add a new track:<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>bed = generateRandomBed(500)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>circos.genomicTrack(extend_chromosomes(bed, c(\"chr1\", \"chr2\")),<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>panel.fun = function(region, value, ...) {<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>circos.genomicPoints(region, value, pch = 16, cex = 0.3)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>})<\/em><\/span>\n\n<span style=\"color: #ff0000;\"><em># Add a link from original chromosome to the zoomed chromosome <\/em><\/span>\n<span style=\"color: #ff0000;\"><em># (Figure\u00a08.7).<\/em><\/span>\n<span style=\"color: #ff0000;\"><em><span style=\"color: #ff0000;\"><em>circos.link(\"chr1\", get.cell.meta.data(\"cell.xlim\", sector.index = \"chr1\"),\"zoom_chr1\", get.cell.meta.data(\"cell.xlim\", sector.index = \"zoom_chr1\"),col = \"#00000020\", border = NA)<\/em><\/span><\/em><\/span>\n<span style=\"color: #ff0000;\"><em>circos.clear()<\/em><\/span><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"959\" src=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_7-1024x959.png\" alt=\"\" class=\"wp-image-2975\" srcset=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_7-1024x959.png 1024w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_7-300x281.png 300w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_7-768x719.png 768w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_7.png 1292w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><span style=\"color: #000000;\">High level genomic functions<\/span><\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><em><span style=\"color: #ff0000;\"># hg19 (default)<\/span><\/em>\n<em><span style=\"color: #ff0000;\">circos.initializeWithIdeogram(plotType = c(\"labels\", \"axis\"))<\/span><\/em>\n<em><span style=\"color: #ff0000;\">circos.track(ylim = c(0, 1)) # this puts a blank track in<\/span><\/em>\n<em><span style=\"color: #ff0000;\">circos.genomicIdeogram() # put ideogram as the third track<\/span><\/em>\n<em><span style=\"color: #ff0000;\">circos.genomicIdeogram(track.height = 0.1)<\/span><\/em>\n<em><span style=\"color: #ff0000;\">circos.clear()<\/span><\/em><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"959\" src=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_8-1024x959.png\" alt=\"\" class=\"wp-image-2980\" srcset=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_8-1024x959.png 1024w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_8-300x281.png 300w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_8-768x719.png 768w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_8.png 1292w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Heatmap<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><em><span style=\"color: #ff0000;\">circos.initializeWithIdeogram()<\/span><\/em>\n<em><span style=\"color: #ff0000;\">bed = generateRandomBed(nr = 100, nc = 4)<\/span><\/em>\n<em><span style=\"color: #ff0000;\">col_fun = colorRamp2(c(-1, 0, 1), c(\"green\", \"black\", \"red\"))<\/span><\/em>\n<em><span style=\"color: #ff0000;\">circos.genomicHeatmap(bed, col = col_fun, side = \"inside\", border = \"white\")<\/span><\/em>\n<em><span style=\"color: #ff0000;\">circos.clear()<\/span><\/em><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"959\" src=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_9-1024x959.png\" alt=\"\" class=\"wp-image-2985\" srcset=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_9-1024x959.png 1024w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_9-300x281.png 300w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_9-768x719.png 768w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_9.png 1292w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Labels<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><em><span style=\"color: #ff0000;\">circos.initializeWithIdeogram()<\/span><\/em>\n<em><span style=\"color: #ff0000;\">bed = generateRandomBed(nr = 50, fun = function(k) sample(letters, k, replace = TRUE))<\/span><\/em>\n<em><span style=\"color: #ff0000;\">bed&#091;1, 4] = \"aaaaa\"<\/span><\/em>\n<em><span style=\"color: #ff0000;\">circos.genomicLabels(bed, labels.column = 4, side = \"inside\")<\/span><\/em><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"959\" src=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_10-1024x959.png\" alt=\"\" class=\"wp-image-2990\" srcset=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_10-1024x959.png 1024w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_10-300x281.png 300w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_10-768x719.png 768w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_10.png 1292w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><span style=\"color: #000000;\">Density and rainfall plots<\/span><\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><em><span style=\"color: #ff0000;\">load(system.file(package = \"circlize\", \"extdata\", \"DMR.RData\"))<\/span><\/em>\n<em><span style=\"color: #ff0000;\">circos.initializeWithIdeogram(chromosome.index = paste0(\"chr\", 1:22))<\/span><\/em>\n<em><span style=\"color: #ff0000;\">bed_list = list(DMR_hyper, DMR_hypo)<\/span><\/em>\n<em><span style=\"color: #ff0000;\">circos.genomicRainfall(bed_list, pch = 16, cex = 0.4, col = c(\"#FF000080\", \"#0000FF80\"))<\/span><\/em>\n<em><span style=\"color: #ff0000;\">circos.genomicDensity(DMR_hyper, col = c(\"#FF000080\"), track.height = 0.1)<\/span><\/em>\n<em><span style=\"color: #ff0000;\">circos.genomicDensity(DMR_hypo, col = c(\"#0000FF80\"), track.height = 0.1)<\/span><\/em>\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"959\" src=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_11-1024x959.png\" alt=\"\" class=\"wp-image-2995\" srcset=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_11-1024x959.png 1024w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_11-300x281.png 300w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_11-768x719.png 768w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/circlize_11.png 1292w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>circlize\u00a0can be used to make chromosome ideograms.\u00a0The example below uses the hg19 assembly (GRCh37) as reference. However, the newer (hg38 \/ GRCh38) can also be downloaded, manipulated and used instead (see below). It is important to use the appropriate reference assembly when working with genomic data. For the examples below to work, the dplyr and [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-2493","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/pcool.dyndns.org\/index.php\/wp-json\/wp\/v2\/pages\/2493","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pcool.dyndns.org\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/pcool.dyndns.org\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/pcool.dyndns.org\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/pcool.dyndns.org\/index.php\/wp-json\/wp\/v2\/comments?post=2493"}],"version-history":[{"count":2,"href":"https:\/\/pcool.dyndns.org\/index.php\/wp-json\/wp\/v2\/pages\/2493\/revisions"}],"predecessor-version":[{"id":4585,"href":"https:\/\/pcool.dyndns.org\/index.php\/wp-json\/wp\/v2\/pages\/2493\/revisions\/4585"}],"wp:attachment":[{"href":"https:\/\/pcool.dyndns.org\/index.php\/wp-json\/wp\/v2\/media?parent=2493"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}