/bio-data-visualization-circos-plots
<!--
$ npx -y skills add FreedomIntelligence/OpenClaw-Medical-Skills --skill bio-data-visualization-circos-plots --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/bio-data-visualization-circos-plots
Context preview
The summary Claude sees to decide when to auto-load this skill.
<!--
SKILL.md
bio-data-visualization-circos-plots.SKILL.md<!--
COPYRIGHT NOTICE
This file is part of the "Universal Biomedical Skills" project.
Copyright (c) 2026 MD BABU MIA, PhD <md.babu.mia@mssm.edu>
All Rights Reserved.
#
This code is proprietary and confidential.
Unauthorized copying of this file, via any medium is strictly prohibited.
#
Provenance: Authenticated by MD BABU MIA
-->
--- name: bio-data-visualization-circos-plots description: Create circular genome visualizations with Circos and pyCircos. Display multi-track data including ideograms, genes, variants, CNVs, and interaction arcs. Use when creating circular genome visualizations. tool_type: mixed primary_tool: Circos measurable_outcome: Execute skill workflow successfully with valid output within 15 minutes. allowed-tools:
- read_file
- run_shell_command
---
Circos Plots
Circular genome visualizations for displaying multiple data tracks around chromosome ideograms.
Tool Options
| Tool | Language | Best For | |------|----------|----------| | Circos | Perl/CLI | Publication-quality, complex layouts | | pyCircos | Python | Programmatic generation, integration | | circlize | R | Quick plots, Bioconductor integration |
Circos (Original)
Installation
conda install -c bioconda circos
# Or download from http://circos.ca
Basic Configuration
Circos requires configuration files defining the plot structure.
circos.conf (main config)
# Chromosome definitions
karyotype = data/karyotype.human.hg38.txt
<ideogram>
<spacing>
default = 0.005r
</spacing>
radius = 0.90r
thickness = 20p
fill = yes
</ideogram>
<image>
dir = output
file = circos.png
png = yes
svg = yes
radius = 1500p
</image>
<<include etc/colors_fonts_patterns.conf>>
<<include etc/housekeeping.conf>>
Data Tracks
Scatter Plot Track
<plots>
<plot>
type = scatter
file = data/scatter.txt
r0 = 0.75r
r1 = 0.85r
min = 0
max = 1
glyph = circle
glyph_size = 8p
color = red
</plot>
</plots>
Histogram Track
<plot>
type = histogram
file = data/histogram.txt
r0 = 0.60r
r1 = 0.74r
min = 0
max = 100
fill_color = blue
</plot>
Heatmap Track
<plot>
type = heatmap
file = data/heatmap.txt
r0 = 0.50r
r1 = 0.59r
color = spectral-9-div
</plot>
Link/Arc Data (Interactions)
<links>
<link>
file = data/links.txt
radius = 0.45r
bezier_radius = 0.1r
color = grey_a5
thickness = 2p
<rules>
<rule>
condition = var(intrachr)
color = red
</rule>
</rules>
</link>
</links>
Data File Formats
# Scatter/histogram: chr start end value
hs1 1000000 1500000 0.75
hs1 2000000 2500000 0.45
# Links: chr1 start1 end1 chr2 start2 end2
hs1 1000000 1500000 hs5 5000000 5500000
Run Circos
circos -conf circos.conf
pyCircos (Python)
Installation
pip install pyCircos
Basic Genome Plot
from pycircos import Gcircle
import matplotlib.pyplot as plt
# Initialize with genome size
circle = Gcircle()
# Add chromosome data (name, length)
chromosomes = [
('chr1', 248956422), ('chr2', 242193529), ('chr3', 198295559),
('chr4', 190214555), ('chr5', 181538259), ('chr6', 170805979),
('chr7', 159345973), ('chr8', 145138636), ('chr9', 138394717),
('chr10', 133797422), ('chr11', 135086622), ('chr12', 133275309)
]
for name, length in chromosomes:
circle.add_garc(Garc(arc_id=name, size=length, interspace=2,
raxis_range=(900, 950), labelposition=80,
label_visible=True))
circle.set_garcs()
# Save
fig = circle.figure
fig.savefig('genome_circle.png', dpi=300)Add Data Tracks
from pycircos import Gcircle, Garc
import numpy as np
circle = Gcircle()
# Add chromosomes
for name, length in chromosomes:
arc = Garc(arc_id=name, size=length, interspace=3,
raxis_range=(800, 850), labelposition=60)
circle.add_garc(arc)
circle.set_garcs()
# Add scatter track
for name, length in chromosomes:
positions = np.random.randint(0, length, 50)
values = np.random.random(50)
circle.scatterplot(name, data=values, positions=positions,
raxis_range=(700, 780), facecolor='red',
markersize=5)
# Add bar track
for name, length in chromosomes:
positions = np.linspace(0, length, 100)
values = np.random.random(100) * 100
circle.barplot(name, data=values, positions=positions,
raxis_range=(600, 680), facecolor='blue')
# Add links
circle.chord_plot(('chr1', 10000000, 20000000),
('chr5', 50000000, 60000000),
raxis_range=(0, 550), facecolor='purple', alpha=0.5)
fig = circle.figure
fig.savefig('circos_with_data.png', dpi=300)circlize (R)
Installation
install.packages('circlize')Basic Plot
library(circlize)
# Initialize with genome
circos.initializeWithIdeogram(species = 'hg38')
# Add track with data
bed <- data.frame(
chr = paste0('chr', sample(1:22, 100, replace=TRUE)),
start = sample(1:1e8, 100),
end = sample(1:1e8, 100),
value = runif(100)
)
bed$end <- bed$start + 1e6
circos.genomicTrack(bed, panel.fun = function(region, value, ...) {
circos.genomicPoints(region, value, pch=16, cex=0.5, col='red')
})
# Add links
link_data <- data.frame(
chr1 = c('chr1', 'chr3'), start1 = c(1e7, 5e7), end1 = c(2e7, 6e7),
chr2 = c('chr5', 'chr10'), start2 = c(3e7, 8e7), end2 = c(4e7, 9e7)
)
for (i in 1:nrow(link_data)) {
circos.link(link_data$chr1[i], c(link_data$start1[i], link_data$end1[i]),
link_data$chr2[i], c(link_data$start2[i], link_data$end2[i]),
col = 'grey')
}
circos.clear()Genomic Density Plot
library(circlize)
circos.initializeWithIdeogram(species = 'hg38', plotType = c('axis', 'labels'))
# Gene density track
circos.genomicDensity(gene_bed, col = 'blue', track.height = 0.1)
# Variant density track
circos.genomicDensity(variant_bed, col = 'red', track.height = 0.1)
# Heatmap track
cirRead more
<!--
COPYRIGHT NOTICE
This file is part of the "Universal Biomedical Skills" project.
Copyright (c) 2026 MD BABU MIA, PhD <md.babu.mia@mssm.edu>
All Rights Reserved.
#
This code is proprietary and confidential.
Unauthorized copying of this file, via any medium is strictly prohibited.
#
Provenance: Authenticated by MD BABU MIA
-->
--- name: bio-data-visualization-circos-plots description: Create circular genome visualizations with Circos and pyCircos. Display multi-track data including ideograms, genes, variants, CNVs, and interaction arcs. Use when creating circular genome visualizations. tool_type: mixed primary_tool: Circos measurable_outcome: Execute skill workflow successfully with valid output within 15 minutes. allowed-tools:
- read_file
- run_shell_command
---
Circos Plots
Circular genome visualizations for displaying multiple data tracks around chromosome ideograms.
Tool Options
| Tool | Language | Best For | |------|----------|----------| | Circos | Perl/CLI | Publication-quality, complex layouts | | pyCircos | Python | Programmatic generation, integration | | circlize | R | Quick plots, Bioconductor integration |
Circos (Original)
Installation
conda install -c bioconda circos # Or download from http://circos.ca
Basic Configuration
Circos requires configuration files defining the plot structure.
circos.conf (main config)
# Chromosome definitions karyotype = data/karyotype.human.hg38.txt <ideogram> <spacing> default = 0.005r </spacing> radius = 0.90r thickness = 20p fill = yes </ideogram> <image> dir = output file = circos.png png = yes svg = yes radius = 1500p </image> <<include etc/colors_fonts_patterns.conf>> <<include etc/housekeeping.conf>>
Data Tracks
Scatter Plot Track
<plots> <plot> type = scatter file = data/scatter.txt r0 = 0.75r r1 = 0.85r min = 0 max = 1 glyph = circle glyph_size = 8p color = red </plot> </plots>
Histogram Track
<plot> type = histogram file = data/histogram.txt r0 = 0.60r r1 = 0.74r min = 0 max = 100 fill_color = blue </plot>
Heatmap Track
<plot> type = heatmap file = data/heatmap.txt r0 = 0.50r r1 = 0.59r color = spectral-9-div </plot>
Link/Arc Data (Interactions)
<links> <link> file = data/links.txt radius = 0.45r bezier_radius = 0.1r color = grey_a5 thickness = 2p <rules> <rule> condition = var(intrachr) color = red </rule> </rules> </link> </links>
Data File Formats
# Scatter/histogram: chr start end value hs1 1000000 1500000 0.75 hs1 2000000 2500000 0.45 # Links: chr1 start1 end1 chr2 start2 end2 hs1 1000000 1500000 hs5 5000000 5500000
Run Circos
circos -conf circos.conf
pyCircos (Python)
Installation
pip install pyCircos
Basic Genome Plot
from pycircos import Gcircle
import matplotlib.pyplot as plt
# Initialize with genome size
circle = Gcircle()
# Add chromosome data (name, length)
chromosomes = [
('chr1', 248956422), ('chr2', 242193529), ('chr3', 198295559),
('chr4', 190214555), ('chr5', 181538259), ('chr6', 170805979),
('chr7', 159345973), ('chr8', 145138636), ('chr9', 138394717),
('chr10', 133797422), ('chr11', 135086622), ('chr12', 133275309)
]
for name, length in chromosomes:
circle.add_garc(Garc(arc_id=name, size=length, interspace=2,
raxis_range=(900, 950), labelposition=80,
label_visible=True))
circle.set_garcs()
# Save
fig = circle.figure
fig.savefig('genome_circle.png', dpi=300)Add Data Tracks
from pycircos import Gcircle, Garc
import numpy as np
circle = Gcircle()
# Add chromosomes
for name, length in chromosomes:
arc = Garc(arc_id=name, size=length, interspace=3,
raxis_range=(800, 850), labelposition=60)
circle.add_garc(arc)
circle.set_garcs()
# Add scatter track
for name, length in chromosomes:
positions = np.random.randint(0, length, 50)
values = np.random.random(50)
circle.scatterplot(name, data=values, positions=positions,
raxis_range=(700, 780), facecolor='red',
markersize=5)
# Add bar track
for name, length in chromosomes:
positions = np.linspace(0, length, 100)
values = np.random.random(100) * 100
circle.barplot(name, data=values, positions=positions,
raxis_range=(600, 680), facecolor='blue')
# Add links
circle.chord_plot(('chr1', 10000000, 20000000),
('chr5', 50000000, 60000000),
raxis_range=(0, 550), facecolor='purple', alpha=0.5)
fig = circle.figure
fig.savefig('circos_with_data.png', dpi=300)circlize (R)
Installation
install.packages('circlize')Basic Plot
library(circlize)
# Initialize with genome
circos.initializeWithIdeogram(species = 'hg38')
# Add track with data
bed <- data.frame(
chr = paste0('chr', sample(1:22, 100, replace=TRUE)),
start = sample(1:1e8, 100),
end = sample(1:1e8, 100),
value = runif(100)
)
bed$end <- bed$start + 1e6
circos.genomicTrack(bed, panel.fun = function(region, value, ...) {
circos.genomicPoints(region, value, pch=16, cex=0.5, col='red')
})
# Add links
link_data <- data.frame(
chr1 = c('chr1', 'chr3'), start1 = c(1e7, 5e7), end1 = c(2e7, 6e7),
chr2 = c('chr5', 'chr10'), start2 = c(3e7, 8e7), end2 = c(4e7, 9e7)
)
for (i in 1:nrow(link_data)) {
circos.link(link_data$chr1[i], c(link_data$start1[i], link_data$end1[i]),
link_data$chr2[i], c(link_data$start2[i], link_data$end2[i]),
col = 'grey')
}
circos.clear()Genomic Density Plot
library(circlize)
circos.initializeWithIdeogram(species = 'hg38', plotType = c('axis', 'labels'))
# Gene density track
circos.genomicDensity(gene_bed, col = 'blue', track.height = 0.1)
# Variant density track
circos.genomicDensity(variant_bed, col = 'red', track.height = 0.1)
# Heatmap track
cirThe largest open-source medical AI skill library for OpenClaw.
Other skills on openclaw-medical-skills.
adaptyv
Cloud laboratory platform for automated protein testing and validation. Use when designing proteins and needing experimental validation including binding…
adhd-daily-planner
Time-blind friendly planning, executive function support, and daily structure for ADHD brains. Specializes in realistic time estimation, dopamine-aware task…
aeon
This skill should be used for time series machine learning tasks including classification, regression, clustering, forecasting, anomaly detection,…
agent-browser
Browse the web for any task — research topics, read articles, interact with web apps, fill forms, take screenshots, extract data, and test web pages. Use…

