vizualizare circulară în R

1.2 o privire rapidă

înainte de a merge prea adânc în detalii, demonstrez mai întâi un exemplu simplucu utilizarea funcționalităților de bază în pachetul circlize pentru a vă ajuta să obțineți o idee de bază despre modul în care funcționează pachetul.

mai întâi să generăm câteva date aleatorii. Este nevoie de un vector de caracter pentrureprezintă Categorii, un vector numeric al valorilor x și un vectoe al valorilor Y.

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

mai întâi inițializăm aspectul circular. Cercul este împărțit în sectoarepe baza intervalului de date pe axele x din fiecare categorie. În următorul cod, df$x este împărțit la df$sectors și lățimea sectoarelor sunt calculate automat pe baza intervalelor de date din fiecare categorie. Fii implicit, sectoarele sunt poziționateau început de la \(\theta = 0\) (în sistemul de coordonate polare) și merg de-a lungul cerculuicuplu-cu înțelepciune. Este posibil să nu vedeți nimic după rularea următorului cod, deoarece notrack a fost adăugat încă.

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

am setat un parametru global track.height la 0.1 prin funcția opțiune circis.par() , astfel încât toate piesele care vor fi adăugate au o înălțime implicită of0.1. Cercul folosit de circlize are întotdeauna o rază de 1, deci o înălțime de0, 1 înseamnă 10% din raza cercului. În capitolele ulterioare, puteți găsi cum să setațiînălțime cu unități fizice, de ex.

rețineți că alocarea sectoarelor are nevoie doar de valori pe direcția x (saupe direcția circulară), valorile pe direcția y (direcția radicală) vor fi utilizateîn etapa de creare a pieselor.

după inițializarea aspectului circular, Grafica poate fi adăugată la complot în mod track-by-track. Înainte de a desena ceva, trebuie să știm că toatepistele ar trebui să fie create mai întâi de circos.trackPlotRegion() sau, pe scurt,circos.track(), apoi funcțiile de nivel scăzut pot fi adăugate ulterior. Doargândiți-vă în motorul grafic de bază R, trebuie mai întâi să apelați plot() apoi putețiutilizați funcții precum points() și lines() pentru a adăuga grafică. Deoarece intervalele xpentru celulele din pistă au fost deja definite în etapa de inițializare,aici trebuie doar să specificăm intervalul y pentru fiecare celulă. Intervalele y pot fi specificate prin argumentul y ca vector numeric (astfel încât intervalul y va fi extras și calculat automat în fiecare celulă) sau argumentul ylim ca avector de lungime doi. În principiu, intervalele y ar trebui să fie aceleași pentru toate celulele din asame track. (Vezi figura 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)
primul exemplu de circlize, adăugați prima piesă.

figura 1.2: primul exemplu de circlize, adăugați prima piesă.

axele pentru graficul circular sunt în mod normal desenate pe cea mai mare parte din afara cercului. Aici adăugăm axe în prima piesă punând circos.axis() înăuntrufuncția auto-definită panel.fun (vezi codul de mai sus). circos.track()creează Regiunea plotare într-o manieră celulă-cu-celulă și panel.fun isactually executat imediat după regiune plotare pentru o anumită celulă iscreated. Astfel, panel.fun înseamnă de fapt adăugarea de grafică în „currentcell” (utilizarea panel.fun este discutată în continuare în secțiunea 2.7).Fără a specifica argumente, circos.axis() desenează axele xîn partea de sus a fiecărei celule (sau exteriorul fiecărei celule).

de asemenea, adăugăm numele sectorului în afara primei piese utilizând circos.text().CELL_META oferă „informații meta” pentru celula curentă. Există mai mulți parametri care pot fi recuperați de CELL_META. Toată utilizarea sa este explicată în secțiunea 2.7. În codul de mai sus, numele sectorului sunt trase în afara celulelor și este posibil să vedeți mesaje de avertizare spunând puncte de datedepășind regiunile de complot. Este foarte bine și nu vă faceți griji. Youpoate adăuga, de asemenea, nume de sector prin crearea unei piste goale fără frontiere ca thefirst track și adăugați nume de sector în ea (cum ar fi ceea cecircos.initializeWithIdeogram() și chordDiagram() face, după ce trece prinurmătoarele capitole).

când se specifică poziția textului pe direcția y, se adaugă un offset demm_y(5) (5mm) la poziția y a textului. În circos.text(), x și yvalorile sunt măsurate în coordonata de date (coordonata din celulă) și există câteva funcții de ajutor care convertesc unitățile absolute la valorile corespunzătoareîn coordonata de date. Secțiunea 2.8.2 oferă mai multe informații despre convertirea unităților îndiferite coordonate.

după crearea piesei, punctele sunt adăugate la prima piesă cucircos.trackPoints(). circos.trackPoints() pur și simplu adaugă puncte în toate celulelesimultan. După cum se explică în continuare în secțiunea 3.2, poate fi înlocuit prin punerea circos.text() în panel.fun, cu toate acestea,circos.trackPoints() ar fi mai convenabil dacă sunt necesare doar punctele pentru a pune în celule (dar nu recomand cu adevărat). Este destul de simplu să înțelegem că acest lucrufuncția are nevoie de o variabilă categorică (df$sectors), valori pe direcția xși direcția y (df$x și df$y).

funcții de nivel scăzut, cum ar fi circos.text() pot fi, de asemenea, utilizate în afarapanel.fun așa cum se arată în codul de mai sus. Dacă da, sector.indexși track.index trebuie specificate în mod explicit, deoarece este posibil ca sectorul „curent” și piesa „curentă”să nu fie ceea ce doriți. În cazul în care grafica sunt adăugate direct la thetrack care sunt create cel mai recent, track.index poate fi omisă, deoarece aceasta piesa este doar marcat ca piesa „curent”.

OK, acum adăugăm histograme la a doua piesă. Aici circos.trackHist() este o funcție de nivel înalt, ceea ce înseamnă că creează o piesă nouă (după cum vă puteți imagina hist()este, de asemenea, o funcție de nivel înalt). bin.size este setat în mod explicit, astfel încât binsize pentru histograme în toate celulele sunt aceleași și pot fi comparate între ele. (Vezi figura 1.3)

bgcol = rep(c("#EFEFEF", "#CCCCCC"), 4)circos.trackHist(df$sectors, df$x, bin.size = 0.2, bg.col = bgcol, col = NA)
primul exemplu de circlize, Adăugați a doua piesă.

figura 1.3: Primul exemplu de circlize, Adăugați a doua piesă.

în a treia piesă și în panel.fun, am ales aleatoriu 10 puncte de date înfiecare celulă, sortați-le după valorile x și conectați-le cu linii. În codul următor, când sectors (primul argument fără nume), x șiy argumentele sunt setate în circos.track(), valorile x și valorile y sunt împărțite la df$sectors și subsetul corespunzător al valorilor x și y sunt trimise lapanel.funprin panel.fun‘s x și y argumente. Astfel, x un y în panel.fun suntexact valorile din celula „curentă”. (A Se Vedea Figura 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)})
primul exemplu de circlize, Adăugați a treia piesă.

figura 1.4: primul exemplu de circlize, se adaugă a treia piesa.

acum ne întoarcem la a doua piesă și actualizăm celula din sectorul „d”.Acest lucru se face prin circos.updatePlotRegion() sau versiunea scurtăcircos.update(). Funcția șterge grafica care au fost adăugate.circos.update() nu pot modifica xlim și ylim ale celulei, precum și alte setări legate de poziția celulei. circos.update() necesitățipentru a specifica în mod explicit indexul sectorului și indexul de urmărire, cu excepția cazului în care celula „curentă”este ceea ce doriți să actualizați. După apelarea circos.update(), celula „curentă” este redirecționată către celula pe care tocmai ați specificat-o și dvs. puteți utiliza funcții grafice de nivel scăzut pentru a adăuga grafică direct în ea.(Vezi figura 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")
primul exemplu de circlize, actualizați a doua piesă.

figura 1.5: primul exemplu de circlize, actualizați a doua piesă.

în continuare vom continua să creăm piese noi. Deși ne-am întors la cea de-a doua piesă, atunci când creăm o piesă nouă, noua piesă este încă creată după piesa care este cea mai mare parte din interior. În această nouă Piesă, adăugăm hărți de căldură cucircos.rect(). Notă aici nu am setat datele de intrare, în timp ce pur și simplu setați argumentulylim, deoarece hărțile de căldură umplu întreaga celulă de la cel mai stângala dreapta și de jos în sus. De asemenea, valoarea exactă a ylim nu esteimportant și x, y în panel.fun() nu sunt utilizate (de fapt, ambele suntNULL). (Vezi figura 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)})
primul exemplu de circlize, Adăugați a patra piesă.

figura 1.6: primul exemplu de circlize, se adaugă a patra piesa.

în cel mai interior al cercului, se adaugă legături sau panglici. Pot exista legături de la un singur punct la punct, punct la interval sau interval la interval. Secțiunea 3.11 oferă utilizarea detaliată a linkurilor. (Vezi figura 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)
primul exemplu de circlize, adăugați link-uri.

figura 1.7: primul exemplu de circlize, adăugați link-uri.

în cele din urmă trebuie să resetăm parametrii grafici și variabilele interne, decică nu va strica următorul complot.

circos.clear()

Lasă un răspuns

Adresa ta de email nu va fi publicată.