1.2 et hurtigt blik
før vi går for dybt ind i detaljerne, demonstrerer jeg først et simpelt eksempelmed brug af grundlæggende funktionaliteter i cirkelpakke for at hjælpe dig med at få en grundlæggende ide om, hvordan pakken fungerer.
lad os først generere nogle tilfældige data. Der er brug for en tegnvektor tilrepræsenterer kategorier, En numerisk vektor af H-værdier og en vectoe af y-værdier.
set.seed(999)n = 1000df = data.frame(sectors = sample(letters, n, replace = TRUE), x = rnorm(n), y = runif(n))
først initialiserer vi det cirkulære layout. Cirklen er opdelt i sektorerbaseret på dataområdet på h-akser i hver kategori. I følgende kode opdeles df$x
med df$sectors
, og bredden af sektorer beregnes automatisk baseret på dataområder i hver kategori. Vær standard, sektorer er positioneretstartede fra \(\theta = 0\) (i det polære koordinatsystem) og gå langs cirkleclock-klogt. Du kan muligvis ikke se noget efter at have kørt følgende kode, fordi notrack er blevet tilføjet endnu.
library(circlize)circos.par("track.height" = 0.1)circos.initialize(df$sectors, x = df$x)
vi indstiller en global parameter track.height
til 0.1 ved valgfunktionencircis.par()
, så alle spor, der tilføjes, har en standardhøjde på0.1. Den cirkel, der bruges af cirkel, har altid en radius på 1, så en højde på0, 1 betyder 10% af cirkelradiusen. I senere kapitler kan du finde ud af, hvordan du indstillerhøjde med fysiske enheder, f.eks.
bemærk, at fordelingen af sektorer kun har brug for værdier på retning (elleri den cirkulære retning) vil værdierne på Y retning (radikal retning) blive brugti trinnet med at oprette spor.
når det cirkulære layout er initialiseret, kan grafik tilføjes til plottet ien spor-for-spor måde. Før vi tegner noget, skal vi vide det allespor skal først oprettes af circos.trackPlotRegion()
eller kort sagtcircos.track()
, så kan funktionerne på lavt niveau tilføjes bagefter. Justthink i base r grafisk motor, skal du først ringe plot()
så kan duBrug funktioner som points()
og lines()
for at tilføje grafik. For celler i sporet er allerede defineret i initialiseringstrinnet, her behøver vi kun at specificere y-området for hver celle. Y-intervallerne kan specificeres med y
argument som en numerisk vektor (så y-området vil automatisk ekstraheres og beregnes i hver celle) eller ylim
argument som avektor af længde to. I princippet skal y-intervaller være ens for alle celler i asame 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å cirkel, tilføj det første spor.
akser til det cirkulære plot tegnes normalt mest uden for cirklen. Her tilføjer vi akser i det første spor ved at sætte circos.axis()
indenden selvdefinerede funktion panel.fun
(se koden ovenfor). circos.track()
opretter plotte region i en celle-for-celle måde og panel.fun
faktisk udføres umiddelbart efter plotte region for en bestemt celle iscreated. Således betyder panel.fun
faktisk at tilføje grafik i” currentcell ” (brug af panel.fun
diskuteres yderligere i afsnit 2.7).Uden at angive nogen argumenter, circos.axis()
tegner akser på toppen af hver celle (eller ydersiden af hver celle).
vi tilføjer også sektornavn uden for det første spor ved hjælp af circos.text()
.CELL_META
giver “meta information” for den aktuelle celle. Der er flere parametre, som kan hentes af CELL_META
. Al dens anvendelse er forklaret i afsnit 2.7. I ovenstående kode er sektornavnene tegnet uden for cellerne, og du kan se advarselsmeddelelser, der siger datapunkter, der overstiger plotningsregionerne. Det er helt fint og ingen bekymring om det. Du kan også tilføje sektornavne ved at oprette et tomt spor uden grænser som det første spor og tilføje sektornavne i det (som hvadcircos.initializeWithIdeogram()
og chordDiagram()
gør, når du går igennemfølgende kapitler).
når du angiver placeringen af tekst på y-retningen, tilføjes en forskydning påmm_y(5)
(5 mm) til Y-positionen for teksten. I circos.text()
måles h og yværdier i datakoordinaten (koordinaten i cellen), og der er nogle hjælpefunktioner, der konverterer absolutte enheder til tilsvarende værdieri datakoordinat. Section2.8. 2 giver mere information om konvertering enheder ligeglade koordinater.
når sporet er oprettet, tilføjes punkter til det første spor af circos.trackPoints()
. circos.trackPoints()
tilføjer blot punkter i alle cellersamtidig. Som nærmere beskrevet i Afsnit 3.2, Det kan væreplaceret ved at sætte circos.text()
i panel.fun
, mencircos.trackPoints()
ville være mere praktisk, hvis kun punkterne er nødvendigeat sætte i cellerne (men jeg anbefaler ikke rigtig). Det er ret ligetil at forstå, at dettefunktion har brug for en kategorisk variabel (df$sectors
), værdier på K retningog Y retning (df$x
og df$y
).
funktioner på lavt niveau som circos.text()
kan også bruges uden forpanel.fun
som vist i ovenstående kode. I så fald skal sector.index
og track.index
specificeres eksplicit, fordi sektoren “nuværende” og “nuværende”spor muligvis ikke er det, du ønsker. Hvis grafikken er direkte tilføjet tiltrack, som senest er oprettet, kan track.index
ommittes, fordi dette spor bare er markeret som det” aktuelle ” spor.
OK, nu tilføjer vi histogrammer til det andet spor. Her er circos.trackHist()
en funktion på højt niveau, hvilket betyder, at den opretter et nyt spor (som du kan forestille dig hist()
er også en funktion på højt niveau). bin.size
er eksplicit indstillet, så binstørrelsen for histogrammer i alle celler er den samme og kan sammenlignes med hinanden. (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: Første eksempel på cirkliser, tilføj det andet spor.
i det tredje spor og i panel.fun
valgte vi tilfældigt 10 datapunkter ihver celle sorterer dem efter h-værdier og forbinder dem med linjer. I følgende kode, når sectors
(det første unavngivne argument), x
og y
argumenter er angivet icircos.track()
, er h-værdier og Y-værdier opdelt med df$sectors
Ogden tilsvarende delmængde af H-og y-værdier sendt til panel.fun
tilpanel.fun
s x
og y
argumenter. Således x
an y
i panel.fun
erpræcis værdierne i den “nuværende” celle. (Jf.Figur1.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å cirkel, tilføj det tredje spor.
nu går vi tilbage til det andet spor og opdaterer cellen i sektor “d”.Dette gøres af circos.updatePlotRegion()
eller den korte versioncircos.update()
. Funktionen sletter grafik, der er tilføjet.circos.update()
kan ikke ændre xlim
og ylim
i cellen såvel somandre indstillinger relateret til cellens position. circos.update()
behovat eksplicit angive sektorindekset og sporindekset, medmindre den “aktuelle”celle er det, du vil opdatere. Efter opkaldet af circos.update()
omdirigeres den” nuværende ” celle til den celle, du lige har angivet, og dukan bruge grafiske funktioner på lavt niveau til at tilføje grafik direkte ind 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å cirkliser, opdater det andet spor.
næste fortsætter vi med at oprette nye spor. Selvom vi er gået tilbage til det andet spor, når du opretter et nyt spor, oprettes det nye spor stadig efter det spor, der er mest inde. I dette nye spor tilføjer vi heatmaps afcircos.rect()
. Bemærk her har vi ikke indstillet inputdataene, mens du blot indstillerylim
argument, fordi heatmaps bare fylder hele cellen fra den mest venstre til højre og fra bund til top. Også den nøjagtige værdi af ylim
er ikkevigtigt og x
, y
i panel.fun()
anvendes 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å cirkel, tilføj det fjerde spor.
i den mest indvendige del af cirklen tilføjes links eller bånd. Der kan være linksfra enkelt punkt til punkt, punkt til interval eller interval til interval. Afsnit 3.11 giver detaljeret brug af links. (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å cirkel, Tilføj links.
endelig skal vi nulstille de grafiske parametre og interne variabler, såat det ikke vil ødelægge dit næste plot.
circos.clear()