2015-08-11 13 views
6

Oto kod z pakietu circlize do tworzenia diagramu akordów. Teraz etykiety są równoległe do krawędzi koła. Czy można obrócić etykiety o 90 stopni, aby były prostopadłe do okręgu?Obróć etykiety na wykresie akordów (R circlize)

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) 

Na rysunku poniżej ręcznie wstawione kilka etykiet, aby pokazać, co mam nadzieję, że do osiągnięcia (End5, End6, End7). Dzięki.

enter image description here

Odpowiedz

5

podstawie swoich przykładowych danych, tutaj jest jeden sposób, aby to zrobić:

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) 

Wynik:

enter image description here

+0

To jest wielki. Mój przykład pokazuje dane w postaci macierzy sąsiedztwa. Gdyby moje dane były w formie listy sąsiedniej, czy po prostu przerobiłbym zmienną 'grid.col'? –

+0

Właśnie użyłem 'grid.col', aby naprawić wybór kolorów. Tbh, nigdy nie korzystałem z pakietu, ale złapałem kod z winiety. – lukeA

+1

@ Brian, Czy używasz pakietu z wersją> = 0.3.0? Jeśli tak, to zmienna wejściowa dla 'chordDiagram()' może teraz być listą przylegania, a 'grid.col' może być ustawiona tak samo, jak wejście jest macierzą. –

Powiązane problemy