1.2 egy gyors pillantás
mielőtt megyünk túl mélyen a részletekbe, először bizonyítani egy egyszerű examplewith segítségével alapvető funkciókat circlize csomagot, hogy segítsen, hogy gotaalapgondolata, hogy a csomag Működik.
először hozzunk létre néhány véletlenszerű adatot. Szükség van egy karaktervektorraa kategóriák, az X értékek numerikus vektora és az y értékek vektoe.
set.seed(999)n = 1000df = data.frame(sectors = sample(letters, n, replace = TRUE), x = rnorm(n), y = runif(n))
először inicializáljuk a kör alakú elrendezést. A kör szektorokra oszlikaz egyes kategóriák x-tengelyeinek adattartománya alapján. A következő kódban a df$x
osztódik df$sectors
– vel, és a szektorok szélessége automatikusan kiszámításra kerül az egyes kategóriák adattartományai alapján. Alapértelmezés szerint a szektorok \(\theta = 0\)-ból indulnak (a polárkoordinátarendszerben), és a circleclock mentén haladnak-bölcsen. Lehet, hogy nem lát semmit a következő kód futtatása után, mert a notrack még hozzá lett adva.
library(circlize)circos.par("track.height" = 0.1)circos.initialize(df$sectors, x = df$x)
a track.height
globális paramétert 0-ra állítjuk be.1 Acircis.par()
opcióval úgy, hogy az összes hozzáadandó sáv alapértelmezett magassága 0,1 legyen. A circlize által használt kör sugara mindig 1, tehát a magasság0, 1 A kör sugarának 10% – át jelenti. A későbbi fejezetekben megtalálhatja, hogyan állíthatja be a magasságot fizikai egységekkel, pl.
vegye figyelembe, hogy az ágazatok elosztásához csak X irányú értékekre van szükség (vagykörirányban), az Y irányú értékek (radikális irány) kerülnek felhasználásraa sávok létrehozásának lépésében.
a kör alakú elrendezés inicializálása után a grafikák hozzáadhatók a cselekményhezegy sávonkénti módon. Mielőtt bármit rajzolnánk, tudnunk kell, hogy mindena sávokat először circos.trackPlotRegion()
vagy rövidencircos.track()
kell létrehozni, majd az alacsony szintű függvények hozzáadhatók. Justthink az alap r grafikus motor, meg kell először hívja plot()
akkorhasználjon funkciókat, mint a points()
és lines()
hozzá grafika. Mivel az X-tartományok a sáv celláihoz már meghatározásra kerültek az inicializálási lépésben,itt csak az y-tartományt kell megadnunk minden cellához. Az y-tartományok meghatározhatók y
argumentummal numerikus vektorként (úgy, hogy az y-tartományt minden cellában automatikusan kivonják és kiszámítják) vagy ylim
argumentummal, mint kettes hosszúságú avektor. Elvileg az y-tartományoknak azonosnak kell lenniük az összes cellában azonos pályán. (Lásd az ábrát 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)
ábra 1.2: első példa circlize, adjuk hozzá az első szám.
a körrajz tengelyeit általában a körön kívülre rajzolják. Itt hozzáadunk tengelyeket az első sávba azáltal, hogy circos.axis()
belülaz önmeghatározott függvény panel.fun
(lásd a fenti kódot). circos.track()
létrehoz ábrázolási régió egy sejt-by-cell módon, és a panel.fun
isactually végre közvetlenül azután, hogy a rajzolási régió egy bizonyos cella iscreated. Így a panel.fun
valójában azt jelenti, hogy grafikákat adunk hozzá a” currentcell ” – hez (a panel.fun
használatát a 2.7 szakasz tárgyalja tovább).Argumentumok megadása nélkül circos.axis()
x-tengelyeket rajzol az egyes cellák tetejére (vagy az egyes cellák külsejére).
ezenkívül a szektor nevét az első sávon kívül adjuk hozzá a circos.text()
használatával.CELL_META
“meta információt” biztosít az aktuális cellához. Számos paraméter létezik, amelyeket CELL_META
– vel lehet lekérni. Minden használatát a 2.7. A fenti kódban az ágazatnevek a cellákon kívülre kerülnek, és figyelmeztető üzeneteket láthat, amelyek szerint az adatpontok meghaladják a rajzoló régiókat. Ez teljesen rendben van, és ne aggódj miatta. Szektorneveket is hozzáadhat úgy, hogy létrehoz egy üres sávot határok nélkül mint azelső sáv, és szektorneveket ad hozzá (például amit acircos.initializeWithIdeogram()
és a chordDiagram()
tesz, miután végigment a következő fejezeteken).
a szöveg Y irányú helyzetének megadásakormm_y(5)
(5 mm) eltolás kerül hozzáadásra a szöveg y pozíciójához. A circos.text()
– ben az X és y értékeket az adatkoordinátában (a cella koordinátájában) mérjük, és vannak olyan segítő funkciók, amelyek az abszolút egységeket megfelelő értékekké alakítják át az adatkoordinátában. A Section2.8.2 több információt nyújt az egységek konvertálásárólkülönböző koordináták.
a sáv létrehozása után a pontokatcircos.trackPoints()
adja hozzá az első sávhoz. circos.trackPoints()
egyszerűen hozzáadja a pontokat minden cellábanegyidejűleg. Amint azt a 3. szakasz részletesebben kifejti.(2) a circos.text()
behelyezésével helyettesíthető panel.fun
, azonbancircos.trackPoints()
kényelmesebb lenne, ha csak a pontokra van szükséga cellákba helyezéshez (de nem igazán ajánlom). Elég egyszerű megérteni, hogy eza függvénynek kategorikus változóra van szüksége (df$sectors
), x irányra és y irányra (df$x
és df$y
).
az olyan alacsony szintű funkciók, mint a circos.text()
, apanel.fun
-en kívül is használhatók, amint azt a fenti kód mutatja. Ha igen, akkor a sector.index
és track.index
értéket kifejezetten meg kell adni, mert az “aktuális” szektor és az “aktuális”sáv nem biztos, hogy a kívánt. Ha a grafika közvetlenül hozzáadódik a legutóbb létrehozott sávhoz, akkor track.index
kihagyható, mert ez a sáv csak “aktuális” sávként van megjelölve.
OK, most hisztogramokat adunk a második számhoz. Itt a circos.trackHist()
magas szintű funkció, ami azt jelenti, hogy új sávot hoz létre (ahogy elképzelheti, a hist()
szintén magas szintű funkció). A bin.size
explicit módon úgy van beállítva, hogy a hisztogramok binsize-je minden cellában azonos legyen, és összehasonlítható legyen egymással. (Lásd az ábrát 1.3)
bgcol = rep(c("#EFEFEF", "#CCCCCC"), 4)circos.trackHist(df$sectors, df$x, bin.size = 0.2, bg.col = bgcol, col = NA)
1.3. ábra: A circlize első példája, adja hozzá a második számot.
a harmadik sávban és panel.fun
-ben véletlenszerűen kiválasztottunk 10 adatpontot minden cellában, rendeztük őket x-értékek szerint, és összekötöttük őket vonalakkal. A followingcode – ban, amikor a sectors
(az első meg nem nevezett argumentum), x
és y
argumentumokcircos.track()
– ben vannak beállítva, az x és y értékek df$sectors
– vel vannak felosztva, és az x és y értékek megfelelő részhalmaza a panel.fun
– nek apanel.fun
x
és y
argumentumokon keresztül kerül elküldésre. Így x
an y
panel.fun
vannakpontosan az “aktuális” cellában lévő értékek. (Lásd Az 1. Ábrát.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)})
ábra 1.4: első példa circlize, adjuk hozzá a harmadik pálya.
most visszatérünk a második sávhoz, és frissítjük a cellát a “d”szektorban.Ezt a circos.updatePlotRegion()
vagy acircos.update()
rövid változat végzi. A funkció törli a hozzáadott grafikákat.circos.update()
nem lehet módosítani a xlim
és ylim
a cella, valamint egyéb beállítások kapcsolatos helyzetét a cella. circos.update()
explicit módon meg kell adni a szektorindexet és a track indexet, kivéve, ha az “aktuális”cellát szeretné frissíteni. A circos.update()
meghívása után az” aktuális ” cella átirányításra kerül az éppen megadott cellába, és önhasználhat alacsony szintű grafikus funkciókat a grafika közvetlen hozzáadásához.(Lásd az ábrát 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")
ábra 1.5: első példa circlize, frissítse a második pálya.
ezután folytatjuk az új számok létrehozását. Bár visszatértünk a második sávhoz, amikor új sávot hozunk létre, az új sáv még mindig létrejön afterthe pálya, amely a leginkább benne van. Ebben az új pályán hőtérképeket adunk hozzácircos.rect()
értékkel. Megjegyzés: itt nem állítottuk be a bemeneti adatokat, miközben egyszerűen beállítottuk aylim
argumentumot, mert a hőtérképek csak az egész cellát töltik ki balról jobbra, alulról felfelé. A ylim
pontos értéke szintén nemFontos és x
, y
panel.fun()
– ben nem használják (valójában mindkettőNULL
). (Lásd az ábrát 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)})
ábra 1.6: első példa circlize, adjuk hozzá a negyedik pálya.
a kör belsejében linkek vagy szalagok kerülnek hozzáadásra. Lehetnek linkekegypontról pontra, pontról intervallumra vagy intervallumról intervallumra. A 3.11 szakasz részletesen ismerteti a linkek használatát. (Lásd az ábrát 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)
ábra 1.7: első példa a circlize, add linkek.
végül vissza kell állítanunk a grafikus paramétereket és a belső változókat, így nem fogja elrontani a következő cselekményt.
circos.clear()