2015-08-11 11 views
6

Hier ist ein Code aus dem circlize Paket zum Erstellen eines Akkorddiagramms. Im Moment sind die Beschriftungen parallel zum Rand des Kreises. Ist es möglich, die Etiketten um 90 Grad zu drehen, um sie senkrecht zum Kreis zu halten?Etiketten drehen in einem ChordDiagramm (R circle)

library(circlize) 
set.seed(999) 
mat = matrix(sample(18, 18), 3, 6) 
rownames(mat) = paste0("Start", 1:3) 
colnames(mat) = paste0("End", 1:6) 
chordDiagrm(mat) 

In der Abbildung unten habe ich ein paar Etiketten manuell eingefügt zu zeigen, was ich hoffe, zu erreichen (End5, End6, END7). Vielen Dank.

enter image description here

Antwort

5

Basierend auf Ihren Beispieldaten, hier ist eine Möglichkeit, es zu tun:

grid.col <- setNames(rainbow(length(unlist(dimnames(mat)))), union(rownames(mat), colnames(mat))) 
par(mar = c(0, 0, 0, 0), mfrow = c(1, 2)) 

# original image 
chordDiagram(mat, grid.col = grid.col) 

# now, the image with rotated labels 
chordDiagram(mat, annotationTrack = "grid", preAllocateTracks = 1, grid.col = grid.col) 
circos.trackPlotRegion(track.index = 1, panel.fun = function(x, y) { 
    xlim = get.cell.meta.data("xlim") 
    ylim = get.cell.meta.data("ylim") 
    sector.name = get.cell.meta.data("sector.index") 
    circos.text(mean(xlim), ylim[1] + .1, sector.name, facing = "clockwise", niceFacing = TRUE, adj = c(0, 0.5)) 
    circos.axis(h = "top", labels.cex = 0.5, major.tick.percentage = 0.2, sector.index = sector.name, track.index = 2) 
}, bg.border = NA) 

Ergebnis:

enter image description here

+0

Das ist großartig. Mein Beispiel zeigt die Daten in Form einer Adjazenzmatrix. Wenn meine Daten in Form einer Adjazenzliste wären, würde ich dann einfach die Variable "grid.col" nacharbeiten? –

+0

Ich habe gerade 'grid.col' verwendet, um die Auswahl der Farben zu beheben. Tbh, hat das Paket nie benutzt, aber den Code von der Vignette genommen. – lukeA

+1

@Brian, verwenden Sie das Paket mit der Version> = 0.3.0? Wenn dies der Fall ist, kann die Eingabevariable für "chordDiagram()" nun eine Adjazenzliste sein und "grid.col" kann so eingestellt werden, als wäre die Eingabe eine Matrix. –