How to draw multiple karyotypes

63 views
Skip to first unread message

Hongsen Liu

unread,
Apr 5, 2025, 10:40:01 AMApr 5
to Circos
I'm a novice in Circos and currently learning how to visualize multiple genomes in separate tracks. A notable example can be found in Figure 1b of this publication (Genome assemblies of 11 bamboo species highlight diversification induced by dynamic subgenome dominance,  DOI: 10.1038/s41588-024-01683-0), where 12 genome assemblies are displayed across distinct concentric tracks, with adjacent genomes connected by links to illustrate collinear blocks.
bamboo_circos.png

As I lack sample datasets demonstrating this configuration, could you assist me in creating a simplified version? Specifically, I would greatly appreciate an example that demonstrates:
1. Placement of 3-5 genomes in individual tracks
2. Chromosome-level representation (e.g., using 2-4 chromosomes per genome)
3. Basic linkage between homologous regions

A minimal working example with configuration files would be particularly helpful for understanding the core implementation. I assure you this will be used strictly for educational purposes.

Thank you for considering this request. I look forward to your guidance.


Martin Krzywinski

unread,
Apr 10, 2025, 4:04:37 PMApr 10
to circos-data-...@googlegroups.com

That's a great figure — and a complicated one.

Keep in mind that Circos performs no analysis or calculations on your data (beyond a few basic things like averages). The outer blue, orange, green and purple tracks are connector tracks


However, looking at the tracks more closely, I see that the lines are curves and not piecewise linear, which makes me think that this figure wasn't made entirely in Circos, but has parts that have been added from other software. 

Specifically, once you've laid out your chromosomes (or generally, any kind of ideogram that could be a chromosome, sequence region, or axis) around the circle, Circos doesn't know how to draw data in the gaps between them. 

You can have as many genomes as you like (e.g. their chromosomes would be defined in separate karyotype files), but these genomes cannot stack. They are placed around the circle (possibly at a different radius). Circos has no sense of "species" — it only needs that chromosomes have different names (hence, I use genus-species prefix, e.g. hs10 for human, rn10 for rat, etc). See here


For example, to have 3 species with 2 chromosomes each, you can define one file:

# species A
chr - A1 1 0 1000 green
chr - A2 1 0 2000 green
# species B
chr - B1 1 0 1000 orange
chr - B2 1 0 5000 orange
# species C
chr - C1 1 0 2000 blue
chr - C2 1 0 4000 blue

Then, you can draw individual data points by referring to specific positions on specific chromosomes, e.g.

C1 0 100 0.5

or connecting them with ribbons

C1 0 100 A1 0 75

Martin Krzywinski
science + art



--
You received this message because you are subscribed to the Google Groups "Circos" group.
To unsubscribe from this group and stop receiving emails from it, send an email to circos-data-visual...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/circos-data-visualization/4fd14d53-089d-4cd7-87d1-488485886ce9n%40googlegroups.com.

Hongsen Liu

unread,
Apr 11, 2025, 5:06:53 AMApr 11
to Circos

Thanks, Martin. To clarify the figure details:

  1. Outer Ring: The visualization is generated from the MCscan collinearity plot of genomic data across different species.
  2. Inner Ring: This is a standard Circos diagram.

The challenge I encountered lies in reproducing the outer ring structure via Circos. Through communication with the original paper's authors, I learned that the outer ring was manually adjusted using Adobe Illustrator rather than being natively generated by Circos.

If you have any suggestions for achieving similar effects programmatically with Circos, I would greatly appreciate your insights.

Best regards,
Hongsen

Martin Krzywinski

unread,
Apr 24, 2025, 5:18:50 PMApr 24
to circos-data-...@googlegroups.com

In principle, you could reproduce the outer rings in Circos, but via a kind of hack, as opposed to feature.

You'd need to set up a "virtual" axis, on which you can draw elements. Something like

axis-a 0 10000 a black
axis-b 0 10000 b  black

Axis-a, for example would correspond to the top-right side of the image (blue/purple connections).

To draw data on this axis, you'd need a route that maps chr+pos each of the species (A. luo, H calc, etc) onto the range 0-10000 of this axis. There would need to be some normalization because (I'm assuming) each species genome length is different. 

You'd need to generate the connectogram track files using this remapping. 

Basically, you're no longer using each chromosome as an "axis", but treating it like a segment that sits on a longer virtual axis. 

This hoop jump is needed because Circos cannot draw data in the space between axes. For example, if there's an axis break (e.g. space between chromosomes) from angle 10-15 degrees, then you cannot draw any data in that angular region.

Martin Krzywinski
science + art


Hongsen Liu

unread,
Apr 26, 2025, 3:28:00 AMApr 26
to Circos

Thank you for your suggestions! I have successfully created the graphic using the plotsr plotting package (GitHub link) and Adobe Illustrator.

Reply all
Reply to author
Forward
0 new messages