Pyöreä visualisointi R

1.2 nopea vilkaisu

ennen kuin menemme liian syvälle yksityiskohtiin, esittelen ensin yksinkertaisen esimerkin käyttäen perustoimintoja circlize-paketissa auttaakseni sinua saamaan perusidean siitä, miten paketti toimii.

luodaan ensin satunnaista dataa. Tarvitaan merkkivektori edustamaan luokkia, x-arvojen numeerinen vektori ja y-arvojen vektori.

set.seed(999)n = 1000df = data.frame(sectors = sample(letters, n, replace = TRUE), x = rnorm(n), y = runif(n))

ensin alustamme ympyrän asettelun. Ympyrä jaetaan sektoreihin kunkin luokan X-akselien tietoalueen perusteella. Seuraavassa koodissa df$xjaetaan df$sectors: llä, ja sektorien leveys lasketaan automaattisesti kunkin luokan tietoalueiden perusteella. Ole oletusarvoinen, sektorit ovat asemoituneet paikasta \(\theta = 0\) (napakoordinaatistossa) ja kulkevat ympyrälukkoa pitkin viisaasti. Et ehkä näe mitään jälkeen käynnissä seuraavat koodi, koska notrack on lisätty vielä.

library(circlize)circos.par("track.height" = 0.1)circos.initialize(df$sectors, x = df$x)

asetimme yleisen parametrin track.height arvoksi 0.1 valinnalla funktiocircis.par() siten, että kaikkien lisättävien kappaleiden oletuskorkeus on 0.1. Circlizen käyttämän ympyrän säde on aina 1, joten korkeus 0,1 tarkoittaa 10% ympyrän säteestä. Myöhemmissä luvuissa voit selvittää, miten voit asettaa korkeuden fyysisillä yksiköillä, esim. cm: llä.

huomaa, että sektorien jako edellyttää vain X-suuntaisia arvoja (tai ympyräsuuntaisia arvoja), y-suuntaisia arvoja (radikaalisuuntia) käytetään raiteiden luomisessa.

ympyränmuotoisen layoutin alustamisen jälkeen kuvioon voidaan lisätä grafiikkaa raidekohtaisesti. Ennen kuin mitään piirretään, on tiedettävä, että alltracks tulee ensin luoda circos.trackPlotRegion() tai lyhyemmincircos.track(), sitten matalan tason funktiot voidaan lisätä jälkikäteen. Just think in the base R graphic engine, you need first call plot() then you can use functions such as points() and lines() to add graphics. Koska X-ranges solujen radalla on jo määritelty alustusvaiheessa, Tässä Meidän tarvitsee vain määrittää y-alue kullekin solulle. Y-alueet voidaan määritellä y argumentilla numeerisena vektorina (siten, että y-alue uutetaan ja lasketaan kussakin solussa) tai ylim argumentilla avektorina, jonka pituus on kaksi. Periaatteessa y-alueiden tulisi olla samat kaikille asame-radan soluille. (KS. Kuva 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)

ensimmäinen esimerkki circlize, lisää ensimmäinen raita.

Kuva 1.2: ensimmäinen esimerkki ympyröinnistä, lisätään ensimmäinen raita.

ympyräkaavion akselit piirretään yleensä eniten piirin ulkopuolelle. Tässä lisätään akselit ensimmäiseen raitaan laittamalla circos.axis() insidethe itse määritelty funktio panel.fun (Katso koodi yllä). circos.track()luo piirtoalueen solukohtaisesti ja panel.fun suoritetaan välittömästi tietyn solun piirtoalueen jälkeen. panel.fun tarkoittaa siis todellisuudessa grafiikan lisäämistä ”currentcelliin” (panel.fun käyttöä käsitellään tarkemmin kohdassa 2.7).Määrittelemättä mitään argumentteja circos.axis() piirtää x-akselit jokaisen solun yläosaan (tai jokaisen solun ulkopuolelle).

lisätään myös sektorin nimi ensimmäisen raidan ulkopuolelle käyttämällä circos.text().CELL_META tarjoaa ”metatietoa” nykyiselle solulle. On olemassa useita muuttujia, jotka voidaan hakea CELL_META. Kaikki sen käyttö selostetaan kohdassa 2.7. Yllä olevassa koodissa sektorien nimet piirretään solujen ulkopuolelle, ja saatat nähdä varoitusviestejä, joissa datapisteet ylittävät piirtoalueet. Se on ihan ok, eikä siitä tarvitse olla huolissaan. Voit myös lisätä sektorien nimiä luomalla ensimmäisenä raitana tyhjän raidan ilman rajoja ja lisäämällä siihen sektorien nimiä (kuten mitäcircos.initializeWithIdeogram() ja chordDiagram() tekevät, kun olet käynyt läpi seuraavat luvut).

kun määritellään tekstin sijainti Y-suunnassa, lisätään tekstin y-asentoon Siirtymämm_y(5) (5mm). circos.text() X-ja Y-arvot mitataan datakoordinaatistossa (koordinaatti solussa), ja on olemassa joitakin auttajafunktioita, jotka muuntavat absoluuttiset yksiköt vastaaviksi arvoiksi datakoordinaatistossa. Section2. 8.2 tarjoaa lisätietoja muuntamalla yksiköt välinpitämätön koordinaatit.

kappaleen syntymisen jälkeen pisteet lisätään ensimmäiselle raidallecircos.trackPoints(). circos.trackPoints() lisää vain pisteet kaikista soluista samanaikaisesti. Kuten jäljempänä 3 jaksossa selitetään.2, se voidaan paikata laittamalla circos.text() sisään panel.fun, kuitenkincircos.trackPoints() olisi kätevämpää, jos vain pisteitä tarvitaan laittaa soluihin (mutta en oikeastaan suosittele). On melko yksinkertaista ymmärtää, että tämä toiminto tarvitsee kategorisen muuttujan (df$sectors), arvot x-suunnassa ja y-suunnassa (df$x ja df$y).

matalan tason funktioita, kuten circos.text(), voidaan käyttää myöspanel.fun ulkopuolella, kuten yllä olevasta koodista käy ilmi. Jos näin on, sector.index ja track.indexon täsmennettävä, koska ”nykyinen” sektori ja ”nykyinen”kappale eivät välttämättä ole sitä, mitä haluat. Jos grafiikka lisätään suoraan raitaan, joka on viimeksi luotu, track.index voidaan poistaa, koska tämä raita on juuri merkitty ”nykyiseksi” raidaksi.

OK, nyt lisätään histogrammit toiseen kappaleeseen. Tässä circos.trackHist() on korkean tason funktio eli se luo uuden raidan (kuten voi kuvitella hist()on myös korkean tason funktio). bin.size on eksplisiittisesti asetettu siten, että kaikkien solujen histogrammien binikoko on sama ja niitä voidaan verrata toisiinsa. (KS. Kuva 1.3)

bgcol = rep(c("#EFEFEF", "#CCCCCC"), 4)circos.trackHist(df$sectors, df$x, bin.size = 0.2, bg.col = bgcol, col = NA)
ensimmäinen esimerkki circlize, lisää toinen raita.

Kuva 1.3: Ensimmäinen esimerkki circlize, lisää toinen raita.

kolmannessa raidassa ja panel.fun poimimme satunnaisesti 10 datapistettä kussakin solussa, lajittelimme ne x-arvoilla ja yhdistimme ne viivoilla. Seuraavassa koodissa, kun sectors (ensimmäinen nimeämätön argumentti), x ja y argumentit asetetaancircos.track(), x-arvot ja y-arvot jaetaan df$sectors ja X-ja y-arvojen osajoukko lähetetään panel.fun kauttapanel.fun’s x ja y argumentit. Näin ollen x an y in panel.fun areexactly the values in the ”current” cell. (KS.Kuva1.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)})
ensimmäinen esimerkki circlize, lisää kolmas raita.

Kuva 1.4: ensimmäinen esimerkki ympyröinnistä, lisätään kolmas raita.

nyt palataan toiseen raitaan ja päivitetään solu sektorissa ”d”.Näin tekee circos.updatePlotRegion() tai lyhyt versiocircos.update(). Toiminto poistaa grafiikat, jotka on lisätty.circos.update() ei voi muuttaa solun xlim ja ylim sekä muita solun sijaintiin liittyviä asetuksia. circos.update() on määriteltävä erikseen sektori-ja kappaleindeksi, paitsi jos haluat päivittää”nykyisen” solun. circos.update(): n kutsumisen jälkeen ”nykyinen” solu ohjataan juuri määrittämääsi soluun ja siihen voi lisätä matalan tason graafisia toimintoja suoraan.(KS. Kuva 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")
ensimmäinen esimerkki circlize, päivittää toinen raita.

Kuva 1.5: ensimmäinen esimerkki ympyröinnistä, Päivitä toinen raita.

seuraavaksi jatketaan uusien kappaleiden tekemistä. Vaikka olemme palanneet toiselle radalle, uutta rataa luotaessa uusi rata syntyy edelleen radan jälkeen, joka on eniten sisällä. Tähän uuteen kappaleeseen lisätään heatmaps bycircos.rect(). Huomaa tässä, että emme ole asettaneet syöttötietoja, vaan yksinkertaisesti asetammeylim argumentin, koska heatmaps vain täyttää koko solun vasemmalta oikealle ja alhaalta ylös. Myöskään tarkkaa arvoa ylim ei käytetä ja x, y panel.fun() ei käytetä (itse asiassa molemmat ovatNULL). (KS. Kuva 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)})
ensimmäinen esimerkki circlize, lisää neljäs raita.

Kuva 1.6: ensimmäinen esimerkki ympyröinnistä, lisää neljäs raita.

ympyrän sisimpään on lisätty linkkejä tai nauhoja. Linkkejä voi olla yhdestä pisteestä pisteeseen, pisteestä intervalliin tai intervallista intervalliin. Kohdassa 3.11 annetaan linkkien yksityiskohtainen käyttö. (KS. Kuva 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)
ensimmäinen esimerkki circlize, lisää linkkejä.

Kuva 1.7: ensimmäinen esimerkki ympyröinnistä, lisää linkkejä.

lopuksi pitää nollata graafiset parametrit ja sisäiset muuttujat, ettei se sotke seuraavaa juonta.

circos.clear()

Vastaa

Sähköpostiosoitettasi ei julkaista.