Circular Visualization in R

1.2 Ein kurzer Blick

Bevor wir zu tief ins Detail gehen, zeige ich zunächst ein einfaches Beispiel mit grundlegenden Funktionen im Circlize-Paket, um Ihnen eine grundlegende Vorstellung von der Funktionsweise des Pakets zu vermitteln.

Lassen Sie uns zuerst einige zufällige Daten generieren. Es braucht einen Zeichenvektor, um Kategorien darzustellen, einen numerischen Vektor von x-Werten und einen Vektor von y-Werten.

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

Zuerst initialisieren wir das kreisförmige Layout. Der Kreis ist in Sektoren unterteiltbasierend auf dem Datenbereich auf x-Achsen in jeder Kategorie. Im folgenden Code wird df$x durch df$sectors geteilt und die Breite der Sektoren wird automatisch basierend auf Datenbereichen in jeder Kategorie berechnet. Standardmäßig sind Sektoren positioniertbeginnt von \(\theta = 0\) (im Polarkoordinatensystem) und geht entlang der Kreisuhr-weise. Möglicherweise sehen Sie nach dem Ausführen des folgenden Codes nichts, da notrack noch hinzugefügt wurde.

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

Wir setzen einen globalen Parameter track.height auf 0.1 durch die Option functioncircis.par(), so dass alle hinzuzufügenden Spuren eine Standardhöhe von 0,1 haben. Der von circlize verwendete Kreis hat immer einen Radius von 1, also bedeutet eine Höhe von0,1 10% des Kreisradius. In späteren Kapiteln erfahren Sie, wie Sie die Höhe mit physikalischen Einheiten einstellen, z. B. cm.

Beachten Sie, dass die Zuweisung von Sektoren nur Werte in x-Richtung (oder in Kreisrichtung) benötigt, die Werte in y-Richtung (radikale Richtung) werden beim Erstellen von Spuren verwendet.

Nachdem das kreisförmige Layout initialisiert wurde, können Grafiken spurweise zum Plot hinzugefügt werden. Bevor wir etwas zeichnen, müssen wir wissen, dass alletracks zuerst von circos.trackPlotRegion() oder kurzcircos.track() erstellt werden sollten, dann können die Low-Level-Funktionen danach hinzugefügt werden. Justthink in der Basis-R-Grafik-Engine müssen Sie zuerst plot() aufrufen, dann können Sie Funktionen wie points() und lines() verwenden, um Grafiken hinzuzufügen. Da x-Bereiche für Zellen in der Spur bereits im Initialisierungsschritt definiert wurden, müssen wir hier nur den y-Bereich für jede Zelle angeben. Die y-Bereiche können durch das Argument y als numerischer Vektor (so dass der y-Bereich in jeder Zelle automatisch extrahiert und berechnet wird) oder das Argument ylim als Vektor der Länge zwei angegeben werden. Im Prinzip sollten y-Bereiche für alle Zellen in derselben Spur gleich sein. (Siehe Abbildung 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)
 Erstes Beispiel für circlize, fügen Sie die erste Spur.

Abbildung 1.2: Erstes Beispiel circlize, fügen Sie die erste Spur.

Die Achsen für das Kreisdiagramm werden normalerweise am äußersten Rand des Kreises gezeichnet. Hier fügen wir Achsen in der ersten Spur hinzu, indem wir circos.axis() einfügendie selbstdefinierte Funktion panel.fun (siehe Code oben). circos.track() erstellt einen Plotbereich zellweise, und panel.fun wird tatsächlich unmittelbar nach dem Erstellen des Plotbereichs für eine bestimmte Zelle ausgeführt. Daher bedeutet panel.fun tatsächlich das Hinzufügen von Grafiken in der „currentcell“ (Die Verwendung von panel.fun wird in Abschnitt 2.7 weiter erläutert).Ohne Angabe von Argumenten zeichnet circos.axis() X-Achsenauf der Oberseite jeder Zelle (oder der Außenseite jeder Zelle).

Außerdem fügen wir mit circos.text() einen Namen außerhalb der ersten Spur hinzu.CELL_META liefert „Metainformationen“ für die aktuelle Zelle. Es gibt mehrere Parameter, die von CELL_META abgerufen werden können. Die gesamte Verwendung wird in Abschnitt 2.7 erläutert. Im obigen Code werden die Sektornamen außerhalb der Zellen gezeichnet, und es werden möglicherweise Warnmeldungen angezeigt, in denen Datenpunkte angezeigt werden, die die Plotbereiche überschreiten. Das ist total in Ordnung und keine Sorge. Sie können auch Sektornamen hinzufügen, indem Sie eine leere Spur ohne Rahmen als erste Spur erstellen und Sektornamen hinzufügen (wie circos.initializeWithIdeogram() und chordDiagram(), nachdem Sie die folgenden Kapitel durchlaufen haben).

Wenn Sie die Position von Text in y-Richtung angeben, wird der y-Position des Textes ein Versatz vonmm_y(5) (5 mm) hinzugefügt. In circos.text() werden x- und y-Werte in der Datenkoordinate (der Koordinate in der Zelle) gemessen, und es gibt einige Hilfsfunktionen, die absolute Einheiten in entsprechende Werte in der Datenkoordinate konvertieren. Abschnitt 2.8.2 enthält weitere Informationen zum Konvertieren von Einheiten in Koordinaten.

Nachdem der Track erstellt wurde, werden Punkte zum ersten Track voncircos.trackPoints() hinzugefügt. circos.trackPoints() fügt einfach Punkte in allen Zellen hinzugleichzeitig. Wie in Abschnitt 3 näher erläutert.2, es kann durch setzen circos.text() in panel.fun, jedoch,circos.trackPoints() wäre bequemer, wenn nur die punkte sind neededto setzen in die zellen (aber ICH nicht wirklich empfehlen). Es ist ziemlich einfach zu verstehen, dass diese Funktion eine kategoriale Variable (df$sectors), Werte für x-Richtung und y-Richtung (df$x und df$y) benötigt.

Low-Level-Funktionen wie circos.text() können auch außerhalb vonpanel.fun verwendet werden, wie im obigen Code gezeigt. Wenn ja, müssen sector.index und track.index explizit angegeben werden, da der „aktuelle“ Sektor und die „aktuelle“ Spur möglicherweise nicht Ihren Wünschen entsprechen. Wenn die Grafiken direkt zum zuletzt erstellten Track hinzugefügt werden, kann track.index weggelassen werden, da dieser Track nur als „aktueller“ Track markiert ist.

OK, jetzt fügen wir der zweiten Spur Histogramme hinzu. Hier ist circos.trackHist() eine High-Level-Funktion, was bedeutet, dass eine neue Spur erstellt wird (wie Sie sich vorstellen können, ist hist() auch eine High-Level-Funktion). bin.size ist explizit so eingestellt, dass die Binsize für Histogramme in allen Zellen gleich ist und miteinander verglichen werden kann. (Siehe Abbildung 1.3)

bgcol = rep(c("#EFEFEF", "#CCCCCC"), 4)circos.trackHist(df$sectors, df$x, bin.size = 0.2, bg.col = bgcol, col = NA)
 Erstes Beispiel für circlize, fügen Sie die zweite Spur.

Abbildung 1.3: Erstes Beispiel für circlize, fügen Sie die zweite Spur.

In der dritten Spur und in panel.fun haben wir zufällig 10 Datenpunkte in jeder Zelle ausgewählt, sie nach x-Werten sortiert und mit Linien verbunden. Wenn im folgenden Code sectors (das erste unbenannte Argument), x und y Argumente incircos.track() festgelegt werden, werden x-Werte und y-Werte durch df$sectors und die entsprechende Teilmenge von x- und y-Werten an panel.fun gesendet durch panel.fun ’s x und y Argumente. Somit sind x und y in panel.fun genau die Werte in der „aktuellen“ Zelle. (Siehe Abb.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)})
 Erstes Beispiel für circlize, fügen Sie die dritte Spur.

Abbildung 1.4: Erstes Beispiel für circlize, fügen Sie die dritte Spur hinzu.

Jetzt gehen wir zurück zum zweiten Track und aktualisieren die Zelle im Sektor „d“.Dies geschieht durch circos.updatePlotRegion() oder die Kurzversioncircos.update(). Die Funktion löscht hinzugefügte Grafiken.circos.update() kann die xlim und ylim der Zelle sowie nicht ändernandere Einstellungen in Bezug auf die Position der Zelle. circos.update() muss explizit den Sektorindex und den Trackindex angeben, es sei denn, die „aktuelle“ Zelle ist das, was Sie aktualisieren möchten. Nach dem Aufruf von circos.update() wird die „aktuelle“ Zelle in die gerade angegebene Zelle umgeleitet, und Sie können Grafikfunktionen auf niedriger Ebene verwenden, um Grafiken direkt hinzuzufügen.(Siehe Abbildung 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")
 Erstes Beispiel für circlize, aktualisieren Sie die zweite Spur.

Abbildung 1.5: Erstes Beispiel für circlize, aktualisieren Sie die zweite Spur.

Als nächstes erstellen wir weiterhin neue Tracks. Obwohl wir zur zweiten Spur zurückgekehrt sind, wird beim Erstellen einer neuen Spur die neue Spur immer noch nach der Spur erstellt, die sich am meisten im Inneren befindet. In diesem neuen Track fügen wir Heatmaps voncircos.rect() hinzu. Beachten Sie, dass wir hier die Eingabedaten nicht festgelegt haben, während Sie einfach das Argumentylim , da Heatmaps nur die gesamte Zelle von ganz links nach rechts und von unten nach oben ausfüllen. Auch der genaue Wert von ylim ist nichtwichtig und x, y in panel.fun() werden nicht verwendet (eigentlich sind sie beideNULL). (Siehe Abbildung 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)})
 Erstes Beispiel für circlize, fügen Sie die vierte Spur.

Abbildung 1.6: Erstes Beispiel von circlize, fügen Sie die vierte Spur hinzu.

Ganz im Inneren des Kreises werden Links oder Bänder hinzugefügt. Es kann Links von einem einzelnen Punkt zu einem Punkt, von einem Punkt zu einem Intervall oder von einem Intervall zu einem Intervall geben. Abschnitt 3.11 enthält eine detaillierte Verwendung von Links. (Siehe Abbildung 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)
 Erstes Beispiel für circlize, Links hinzufügen.

Abbildung 1.7: Erstes Beispiel für circlize, Links hinzufügen.

Schließlich müssen wir die Grafikparameter und internen Variablen zurücksetzen, damit es Ihren nächsten Plot nicht durcheinander bringt.

circos.clear()

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.