import gosling as gos
WIDTH = 725
tileset = gos.vector(
url="https://resgen.io/api/v1/tileset_info/?d=VLFaiSVjTjW6mkbjRjWREA",
column="position",
value="peak",
)
cytoband = gos.csv(
url="https://raw.githubusercontent.com/sehilyi/gemini-datasets/master/data/UCSC.HG38.Human.CytoBandIdeogram.csv",
chromosomeField="Chromosome",
genomicFields=["chromStart", "chromEnd"],
)
segdup = gos.csv(
url="https://raw.githubusercontent.com/vigsterkr/circos/master/data/5/segdup.txt",
headerNames=["id", "chr", "p1", "p2"],
chromosomePrefix="hs",
chromosomeField="chr",
genomicFields=["p1", "p2"],
separator=" ",
longToWideId="id",
)
bars = gos.Track(tileset).mark_bar().encode(
x=gos.X("position:G", axis="top"),
y=gos.Y("peak:Q", axis="right"),
color=gos.value("#EEEDA1"),
).properties(width=WIDTH, height=60)
ideogram = gos.Track(cytoband).mark_rect().encode(
color=gos.Color("Stain:N",
domain=["gneg", "gpos25", "gpos50", "gpos75", "gpos100", "gvar", "acen"],
range=["white", "#D9D9D9", "#979797", "#636363", "black", "#F0F0F0", "#8D8D8D"],
),
x="chromStart:G",
xe="chromEnd:G",
stroke=gos.value("lightgray"),
strokeWidth=gos.value(0.5),
).properties(width=WIDTH, height=30)
link_base = gos.Track(segdup).mark_withinLink().encode(
x="p1:G",
xe="p1_2:G",
x1="p2:G",
x1e="P2_2:G",
opacity=gos.value(0.4)
)
colors = ["#E79F00", "#029F73", "#0072B2", "#CB7AA7", "#D45E00", "#57B4E9", "#EFE441"]
link = gos.overlay(
link_base
.encode(stroke=gos.value("lightgray"), strokeWidth=gos.value(1))
.transform_filter_not("chr", oneOf=["hs1"])
,
link_base
.encode(stroke=gos.Stroke("chr_2:N", range=colors), strokeWidth=gos.value(1.5))
.transform_filter("chr", oneOf=["hs1"])
)
gos.stack(bars, ideogram, link).properties(
title="Circos",
description="http://circos.ca/intro/genomic_data/",
layout="circular",
static=True,
spacing=1,
centerRadius=0.3,
)