1.2 et raskt blikk
før vi går for dypt inn i detaljene, demonstrerer jeg først et enkelt eksempelmed å bruke grunnleggende funksjoner i circlize-pakken for å hjelpe deg med å få en grunnleggende ide om hvordan pakken fungerer.
la Oss først generere noen tilfeldige data. Det trenger en tegnvektor torepresent kategorier, en numerisk vektor av x-verdier og en vectoe av y-verdier.
set.seed(999)n = 1000df = data.frame(sectors = sample(letters, n, replace = TRUE), x = rnorm(n), y = runif(n))
først initialiserer vi det sirkulære oppsettet. Sirkelen er delt inn i sektorerbasert på dataområdet på x-akser i hver kategori. I følgende kode deles df$x
med df$sectors
og bredden på sektorer beregnes automatisk basert på dataområder i hver kategori. Være standard, sektorer er plassertstartet fra \(\theta = 0\) (i det polare koordinatsystemet) og gå langs circleclock-klokt. Du kan ikke se noe etter å ha kjørt følgende kode fordi notrack er lagt til ennå.
library(circlize)circos.par("track.height" = 0.1)circos.initialize(df$sectors, x = df$x)
vi setter en global parameter track.height
til 0.1 ved opsjonsfunksjonen circis.par()
slik at alle spor som legges til, har en standardhøyde på0. 1. Sirkelen som brukes av circlize har alltid en radius på 1, så en høyde på0, 1 betyr 10% av sirkelradiusen. I senere kapitler kan du finne hvordan du stillerhøyde med fysiske enheter, f.eks.
Merk at tildeling av sektorer bare trenger verdier på x-retning (elleri sirkulær retning) vil verdiene på y-retning (radikal retning) bli brukti trinnet med å lage spor.
etter at det sirkulære oppsettet er initialisert, kan grafikk legges til plottet ina spor-for-spor måte. Før du tegner noe, må vi vite at allespor skal først opprettes av circos.trackPlotRegion()
eller, for kort, circos.track()
, så kan lavnivåfunksjonene legges til etterpå. Justthink i basen r grafisk motor, må du først ringe plot()
så kan dubruk funksjoner som points()
og lines()
for å legge til grafikk. Siden x-rangesfor celler i sporet allerede er definert i initialiseringstrinnet, trenger vi bare å spesifisere y-området for hver celle. Y-områdene kan spesifiseres med y
argument som en numerisk vektor (slik at y-området vil beautomatisk ekstraheres og beregnes i hver celle) eller ylim
argument som avektor av lengde to. I prinsippet bør y-områder være de samme for alle celler i asamme spor. (Se Figur 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)
Figur 1.2: Første eksempel på sirkel, legg til det første sporet.
Akser for sirkelplottet tegnes normalt mest utenfor sirkelen. Her legger vi til akser i første spor ved å sette circos.axis()
inneden selvdefinerte funksjonen panel.fun
(se koden ovenfor). circos.track()
oppretter plotting region i en celle-for-celle måte og panel.fun
isactually utført umiddelbart etter plotting region for en bestemt celle iscreated. Dermed betyr panel.fun
faktisk å legge til grafikk i «currentcell» (Bruk av panel.fun
er nærmere omtalt I Avsnitt 2.7).Uten å angi noen argumenter trekker circos.axis()
x-akser øverst i hver celle (eller utsiden av hver celle).
vi legger også til sektornavn utenfor det første sporet ved å bruke circos.text()
.CELL_META
gir «metainformasjon» for den gjeldende cellen. Det er flere parametere som kan hentes av CELL_META
. All bruk er forklart I Avsnitt 2.7. I koden ovenfor er sektornavnene tegnet utenfor cellene, og du kan se advarsler som sier datapunkter som overskrider plottingsområdene. Det er helt greit og ikke bekymre deg for det. Du kan også legge til sektornavn ved å opprette et tomt spor uten grenser som det første sporet og legge til sektornavn i det (som hvacircos.initializeWithIdeogram()
og chordDiagram()
gjør, etter at du har gått gjennom følgende kapitler).
når du angir tekstposisjonen i y-retningen, legges en forskyvning påmm_y(5)
(5 mm) til y-posisjonen til teksten. I circos.text()
måles x og yvalues i datakoordinatet( koordinaten i cellen), og det er noen hjelpefunksjoner som konverterer absolutte enheter til tilsvarende verdier i datakoordinat. Section2. 8.2 gir mer informasjon om å konvertere enheter iforskjellige koordinater.
etter at sporet er opprettet, legges poeng til det første sporet medcircos.trackPoints()
. circos.trackPoints()
legger bare til poeng i alle cellersamtidig. Som nærmere forklart I punkt 3.2, det kan bli erstattet ved å sette circos.text()
i panel.fun
, mencircos.trackPoints()
ville være mer praktisk hvis bare poengene trengs for å sette inn cellene(men jeg anbefaler egentlig ikke). Det er ganske greit å forstå at dettefunksjonen trenger en kategorisk variabel (df$sectors
), verdier på x retningog y retning (df$x
og df$y
).
lavnivåfunksjoner som circos.text()
kan også brukes utenfor panel.fun
som vist i koden ovenfor. I så fall må sector.index
og track.index
spesifiseres eksplisitt fordi» nåværende «sektor og»nåværende» spor kanskje ikke er det du vil ha. Hvis grafikken legges direkte til sporet som er sist opprettet, kan track.index
bli ommitted fordidette sporet er bare merket som «nåværende» spor.
OK, nå legger vi histogrammer til det andre sporet. Her circos.trackHist()
er ahigh-level funksjon som betyr at det skaper et nytt spor (som du kan forestille deg hist()
er også en høyt nivå funksjon). bin.size
er eksplisitt angitt slik at binsize for histogrammer i alle celler er de samme og kan sammenlignes med hverandre. (Se Figur 1.3)
bgcol = rep(c("#EFEFEF", "#CCCCCC"), 4)circos.trackHist(df$sectors, df$x, bin.size = 0.2, bg.col = bgcol, col = NA)
Figur 1.3: Forste eksempel pa circlize, legg til det andre sporet.
i det tredje sporet og i panel.fun
plukket vi tilfeldig 10 datapunkter ihver celle, sortere dem etter x-verdier og koble dem med linjer. I followingcode, når sectors
(det første ikke navngitte argumentet), x
og y
argumenter er angitt icircos.track()
, deles x-verdier og y-verdier med df$sectors
og tilsvarende delsett av x-og y-verdier sendes til panel.fun
tilpanel.fun
‘s x
og y
argumenter. Dermed er x
en y
i panel.fun
nøyaktig verdiene i den» nåværende » cellen. (Se Figur 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)})
Figur 1.4: Første eksempel på sirkel, legg til det tredje sporet.
nå går Vi tilbake til det andre sporet og oppdaterer cellen i sektor «d».Dette gjøres av circos.updatePlotRegion()
eller kortversjonencircos.update()
. Funksjonen sletter grafikk som er lagt til.circos.update()
kan ikke endre xlim
og ylim
av cellen, så vel somandre innstillinger relatert til cellens posisjon. circos.update()
needsto eksplisitt angi sektorindeksen og sporindeksen med mindre den»nåværende» cellen er det du vil oppdatere. Etter kallingen av circos.update()
blir den» nåværende » cellen omdirigert til cellen du nettopp angav, og dukan bruke lavt nivå grafiske funksjoner for å legge til grafikk direkte inn i den.(Se Figur 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")
Figur 1.5: Første eksempel på sirkel, oppdater det andre sporet.
neste fortsetter vi å lage nye spor. Selv om vi har gått tilbake til det andre sporet, når du oppretter et nytt spor, er det nye sporet fortsatt opprettet etter sporet som er mest inne. I dette nye sporet legger vi til heatmaps vedcircos.rect()
. Merk her har vi ikke satt inndataene, mens du bare angir argumentetylim
fordi heatmaps bare fyller hele cellen fra venstre til høyre og fra bunn til topp. Også den eksakte verdien av ylim
er ikkeviktig og x
, y
i panel.fun()
brukes ikke (faktisk er de beggeNULL
). (Se Figur 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)})
Figur 1.6: Første eksempel på sirkel, legg til det fjerde sporet.
i de fleste innsiden av sirkelen legges lenker eller bånd til. Det kan være linksfra enkelt punkt til punkt, punkt til intervall eller intervall til intervall. Seksjon 3.11 gir detaljert bruk av lenker. (Se Figur 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)
Figur 1.7: Første eksempel på sirkel, legg til lenker.
Til Slutt må Vi tilbakestille grafiske parametere og interne variabler, såat det ikke vil ødelegge ditt neste plott.
circos.clear()