1.2 rychlý pohled
než půjdeme příliš hluboko do detailů, nejprve jsem ukázat jednoduchý příklads použitím základních funkcí v circlize balíčku, které vám pomohou získat základní představu o tom, jak balíček funguje.
nejprve vygenerujme nějaká náhodná data. K dispozici je vektor znakůpřítomné Kategorie, číselný vektor hodnot x a vectoe hodnot y.
set.seed(999)n = 1000df = data.frame(sectors = sample(letters, n, replace = TRUE), x = rnorm(n), y = runif(n))
nejprve inicializujeme kruhové uspořádání. Kruh je rozdělen na sektoryzaložené na datovém rozsahu na osách x v každé kategorii. V následujícím kódu je df$x
děleno df$sectors
a šířka sektorů se automaticky vypočítá na základě datových rozsahů v každé kategorii. Být výchozí, sektory jsou umístěnyzačal z \(\theta = 0\) (v polárním souřadném systému) a šel po kruhu-moudře. Po spuštění následujícího kódu možná nic neuvidíte, protože notrack byl ještě přidán.
library(circlize)circos.par("track.height" = 0.1)circos.initialize(df$sectors, x = df$x)
globální parametr track.height
nastavíme na 0.1 volbou funkcecircis.par()
tak, aby všechny skladby, které budou přidány, měly výchozí výšku 0,1. Kruh používaný circlize má vždy poloměr 1, takže výška 0,1 znamená 10% poloměru kruhu. V pozdějších kapitolách najdete, jak nastavitvýška s fyzickými jednotkami, např.
Všimněte si, že přidělení sektorů vyžaduje pouze hodnoty ve směru x (nebona kruhovém směru) budou hodnoty ve směru y (radikální směr) použity v kroku vytváření stop.
po inicializaci kruhového rozvržení lze grafiku přidat do grafu způsobem sledování po stopách. Než něco nakreslíme, musíme vědět, že všechnystopy by měly být nejprve vytvořeny pomocí circos.trackPlotRegion()
nebo zkráceněcircos.track()
, poté mohou být přidány funkce nízké úrovně. Justthink v základním grafickém enginu R, musíte nejprve zavolat plot()
pak můžetePoužijte funkce jako points()
a lines()
pro přidání grafiky. Protože x-rangespro buňky ve stopě již byly definovány v inicializačním kroku, zde stačí zadat rozsah y pro každou buňku. Y-rozsahy mohou být specifikovány argumentem y
jako číselný vektor (takže y-rozsah bude beautomaticky extrahován a vypočítán v každé buňce) nebo argumentem ylim
jako avektor délky dva. V zásadě by rozsahy y měly být stejné pro všechny buňky ve stopě asame. (Viz obrázek 1.2)
circos.track(df$sectors, y = df$y, panel.fun = function(x, y) { circos.text(CELL_META$xcenter, CELL_META$cell.ylim + mm_y(5), CELL_META$sector.index) circos.axis(labels.cex = 0.6)})col = rep(c("#FF0000", "#00FF00"), 4)circos.trackPoints(df$sectors, df$x, df$y, col = col, pch = 16, cex = 0.5)circos.text(-1, 0.5, "text", sector.index = "a", track.index = 1)
obrázek 1.2: první příklad circlize, přidejte první stopu.
osy pro kruhový graf jsou obvykle kresleny nejvíce mimo kruh. Zde přidáme osy do první stopy vložením circos.axis()
uvnitřsámdefinovaná funkce panel.fun
(viz výše uvedený kód). circos.track()
vytvoří oblast Vykreslování způsobem buňky po buňce a panel.fun
je ve skutečnosti provedeno bezprostředně po vytvoření oblasti Vykreslování pro určitou buňku. panel.fun
tedy ve skutečnosti znamená přidání grafiky do „currentcell“ (použití panel.fun
je dále popsáno v části 2.7).Bez zadání argumentů, circos.axis()
kreslí x-axena horní části každé buňky (nebo na vnější straně každé buňky).
také přidáme název sektoru mimo první stopu pomocí circos.text()
.CELL_META
poskytuje „meta informace“ pro aktuální buňku. Existuje několik parametrů, které lze načíst pomocí CELL_META
. Veškeré jeho použití je vysvětleno v oddíle 2.7. Ve výše uvedeném kódu jsou názvy sektorů nakresleny mimo buňky a mohou se zobrazit varovné zprávy s datovými body, které překračují oblasti Vykreslování. To je celkem v pořádku a nebojte se o to. Můžete také přidat názvy sektorů vytvořením prázdné stopy bez hranic jako první stopy a přidáním názvů sektorů (jako to, cocircos.initializeWithIdeogram()
a chordDiagram()
dělají, poté, co projdete následujícími kapitolami).
při určování polohy textu ve směru y se k poloze y textu přidá posun omm_y(5)
(5 mm). V circos.text()
jsou x a yvalues měřeny v datové souřadnici (souřadnice v buňce) a existují některé pomocné funkce, které převádějí absolutní jednotky na odpovídající hodnoty v datové souřadnici. Sekce 2. 8. 2 poskytuje více informací o převodu jednotek v různých souřadnicích.
po vytvoření stopy se body přidávají do první stopycircos.trackPoints()
. circos.trackPoints()
jednoduše přidá body do všech buňeksoučasně. Jak je dále vysvětleno v oddíle 3.2, může to býtnahrazeno vložením circos.text()
do panel.fun
, nicméněcircos.trackPoints()
by bylo výhodnější, kdyby byly do buněk potřeba pouze body (ale opravdu nedoporučuji). Je to docela jednoduché pochopitfunkce potřebuje kategorickou proměnnou (df$sectors
), hodnoty na směru xa směr y (df$x
a df$y
).
nízkoúrovňové funkce, jako je circos.text()
, mohou být také použity mimopanel.fun
, jak je uvedeno ve výše uvedeném kódu. Pokud ano, sector.index
a track.index
je třeba zadat explicitně, protože“ aktuální „sektor a“aktuální“ stopa nemusí být to, co chcete. Pokud je grafika přímo přidána do poslední vytvořené stopy, track.index
může být ommitted, protože tato stopa je právě označena jako „aktuální“ stopa.
OK, nyní přidáme histogramy do druhé stopy. Zde circos.trackHist()
je ahigh-level funkce, což znamená, že vytvoří novou stopu (jak si můžete představit hist()
je také funkce na vysoké úrovni). bin.size
je explicitně nastaven tak, že binsize pro histogramy ve všech buňkách jsou stejné a mohou být porovnány navzájem. (Viz obrázek 1.3)
bgcol = rep(c("#EFEFEF", "#CCCCCC"), 4)circos.trackHist(df$sectors, df$x, bin.size = 0.2, bg.col = bgcol, col = NA)
obrázek 1.3: První příklad circlize, přidejte druhou stopu.
ve třetí stopě a v panel.fun
jsme náhodně vybrali 10 datových bodů v každé buňce, seřadili je podle hodnot x a spojili je s čarami. V followingcode, když sectors
(první nepojmenovaný argument), x
a y
argumenty jsou nastaveny vcircos.track()
, hodnoty x a hodnoty y jsou rozděleny df$sectors
a odpovídající podmnožina hodnot x a y jsou odeslány do panel.fun
přes panel.fun
‚s x
a y
argumenty. Takže x
an y
v panel.fun
jsoupřesně hodnoty v buňce „aktuální“. (Viz Obr. 1.4)
circos.track(df$sectors, x = df$x, y = df$y, panel.fun = function(x, y) { ind = sample(length(x), 10) x2 = x y2 = y od = order(x2) circos.lines(x2, y2)})
obrázek 1.4: první příklad circlize, přidejte třetí stopu.
nyní se vrátíme k druhé stopě a aktualizujeme buňku v sektoru „d“.To se provádí pomocí circos.updatePlotRegion()
nebo krátké verzecircos.update()
. Funkce vymaže grafiku, které byly přidány.circos.update()
nelze upravit xlim
a ylim
buňky, stejně jako další nastavení týkající se polohy buňky. circos.update()
je třeba explicitně zadat index sektoru a index stopy, pokud buňka“aktuální“ není to, co chcete aktualizovat. Po volání circos.update()
je“ aktuální “ buňka přesměrována na buňku, kterou jste právě zadali, a vymůžete použít grafické funkce nízké úrovně pro přidání grafiky přímo do ní.(Viz obrázek 1.5)
circos.update(sector.index = "d", track.index = 2, bg.col = "#FF8080", bg.border = "black")circos.points(x = -2:2, y = rep(0.5, 5), col = "white")circos.text(CELL_META$xcenter, CELL_META$ycenter, "updated", col = "white")
obrázek 1.5: první příklad circlize, aktualizujte druhou stopu.
dále pokračujeme v vytváření nových skladeb. Přestože jsme se vrátili k této druhé stopě, při vytváření nové stopy je nová stopa stále vytvořena po stopě, která je nejvíce uvnitř. V této nové skladbě přidáme heatmapycircos.rect()
. Poznámka: zde jsme nenastavili vstupní data, zatímco jednoduše nastavit ylim
argument, protože heatmapy jen vyplnit celou buňku zleva doprava a zdola nahoru. Také přesná hodnota ylim
nenídůležité a x
, y
v panel.fun()
se nepoužívají(ve skutečnosti jsou obaNULL
). (Viz obrázek 1.6)
circos.track(ylim = c(0, 1), panel.fun = function(x, y) { xlim = CELL_META$xlim ylim = CELL_META$ylim breaks = seq(xlim, xlim, by = 0.1) n_breaks = length(breaks) circos.rect(breaks, rep(ylim, n_breaks - 1), breaks, rep(ylim, n_breaks - 1), col = rand_color(n_breaks), border = NA)})
obrázek 1.6: první příklad circlize, přidejte čtvrtou stopu.
v nejvíce uvnitř kruhu jsou přidány odkazy nebo stuhy. Mohou existovat odkazy od jednoho bodu k bodu, od bodu k intervalu nebo od intervalu k intervalu. Oddíl 3.11 uvádí podrobné použití odkazů. (Viz obrázek 1.7)
circos.link("a", 0, "b", 0, h = 0.4)circos.link("c", c(-0.5, 0.5), "d", c(-0.5,0.5), col = "red", border = "blue", h = 0.2)circos.link("e", 0, "g", c(-1,1), col = "green", border = "black", lwd = 2, lty = 2)
obrázek 1.7: první příklad circlize, přidat odkazy.
nakonec musíme resetovat grafické parametry a vnitřní proměnné, takžeže to nebude zkazit váš další graf.
circos.clear()