16

Here is some code from the circlize package for creating a chord diagram.Right now the labels are parallel to the edge of the circle. Is it possible to rotate the labels 90 degrees to they are perpendicular to the 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)
chordDiagram(mat)

In the figure below I manually inserted a few labels to show what I hope to accomplish (End5, End6, End7). Thanks.

enter image description here

Mikko
  • 7,530
  • 8
  • 55
  • 92
Brian P
  • 1,496
  • 4
  • 25
  • 38

1 Answers1

18

Based on your example data, here's one way to do it:

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)

Result:

enter image description here

lukeA
  • 53,097
  • 5
  • 97
  • 100
  • This is great. My example show the data in the form of an adjacency matrix. If my data were in the form of an adjacency list, would I just re-work the `grid.col` variable? – Brian P Aug 12 '15 at 18:03
  • I just used `grid.col` to fix the choice of colors. Tbh, never used the package, but grabbed the code from the vignette. – lukeA Aug 12 '15 at 22:41
  • 1
    @Brian, Are you using the package with version >=0.3.0? If so, the input variable for `chordDiagram()` now can be an adjacency list and `grid.col` can be set as same as if the input is a matrix. – Zuguang Gu Aug 13 '15 at 14:02